@sei-js/create-sei 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/.yarn/install-state.gz +0 -0
  2. package/CHANGELOG.md +12 -0
  3. package/README.md +16 -25
  4. package/biome.json +8 -0
  5. package/dist/main.js +10 -60
  6. package/dist/templates/next-template/.eslintrc.json +3 -0
  7. package/dist/templates/next-template/package.json +30 -0
  8. package/dist/templates/next-template/src/app/components/Homepage/Examples.tsx +257 -0
  9. package/dist/templates/next-template/src/app/components/Homepage/Homepage.css +154 -0
  10. package/dist/templates/{next-wagmi-template → next-template}/src/app/components/Homepage/Homepage.tsx +10 -36
  11. package/{templates/next-wagmi-template → dist/templates/next-template}/src/app/components/Web3Provider.tsx +29 -28
  12. package/dist/templates/next-template/src/app/components/index.ts +2 -0
  13. package/dist/templates/{next-wagmi-template → next-template}/src/app/constants/chain.ts +2 -2
  14. package/dist/templates/next-template/src/app/constants/index.ts +1 -0
  15. package/dist/templates/next-template/src/app/index.css +184 -0
  16. package/dist/templates/next-template/src/app/layout.tsx +21 -0
  17. package/dist/templates/next-template/src/app/page.tsx +21 -0
  18. package/dist/templates/next-template/tsconfig.json +26 -0
  19. package/dist/templates/vite-template/.eslintrc.cjs +11 -0
  20. package/dist/templates/vite-template/package.json +33 -0
  21. package/dist/templates/vite-template/src/App.tsx +21 -0
  22. package/dist/templates/vite-template/src/components/Homepage/Examples.tsx +255 -0
  23. package/dist/templates/vite-template/src/components/Homepage/Homepage.css +154 -0
  24. package/dist/templates/vite-template/src/components/Homepage/Homepage.tsx +81 -0
  25. package/{templates/vite-wagmi-template → dist/templates/vite-template}/src/components/Web3Provider.tsx +29 -28
  26. package/dist/templates/{vite-wagmi-template → vite-template}/src/constants/chain.ts +1 -1
  27. package/dist/templates/vite-template/src/constants/index.ts +1 -0
  28. package/dist/templates/vite-template/src/index.css +183 -0
  29. package/dist/templates/vite-template/src/main.tsx +12 -0
  30. package/dist/templates/vite-template/tsconfig.app.json +25 -0
  31. package/dist/templates/vite-template/tsconfig.json +11 -0
  32. package/dist/templates/vite-template/tsconfig.node.json +14 -0
  33. package/dist/templates/vite-template/vite.config.ts +10 -0
  34. package/package.json +1 -1
  35. package/src/main.ts +26 -87
  36. package/templates/next-template/.eslintrc.json +3 -0
  37. package/templates/next-template/package.json +30 -0
  38. package/templates/next-template/src/app/components/Homepage/Examples.tsx +257 -0
  39. package/templates/next-template/src/app/components/Homepage/Homepage.css +154 -0
  40. package/templates/{next-wagmi-template → next-template}/src/app/components/Homepage/Homepage.tsx +10 -36
  41. package/{dist/templates/next-wagmi-template → templates/next-template}/src/app/components/Web3Provider.tsx +29 -28
  42. package/templates/next-template/src/app/components/index.ts +2 -0
  43. package/templates/{next-wagmi-template → next-template}/src/app/constants/chain.ts +2 -2
  44. package/templates/next-template/src/app/constants/index.ts +1 -0
  45. package/templates/next-template/src/app/index.css +184 -0
  46. package/templates/next-template/src/app/layout.tsx +21 -0
  47. package/templates/next-template/src/app/page.tsx +21 -0
  48. package/templates/next-template/tsconfig.json +26 -0
  49. package/templates/vite-template/.eslintrc.cjs +11 -0
  50. package/templates/vite-template/package.json +33 -0
  51. package/templates/vite-template/src/App.tsx +21 -0
  52. package/templates/vite-template/src/components/Homepage/Examples.tsx +255 -0
  53. package/templates/vite-template/src/components/Homepage/Homepage.css +154 -0
  54. package/templates/vite-template/src/components/Homepage/Homepage.tsx +81 -0
  55. package/{dist/templates/vite-wagmi-template → templates/vite-template}/src/components/Web3Provider.tsx +29 -28
  56. package/templates/{vite-wagmi-template → vite-template}/src/constants/chain.ts +1 -1
  57. package/templates/vite-template/src/constants/index.ts +1 -0
  58. package/templates/vite-template/src/index.css +183 -0
  59. package/templates/vite-template/src/main.tsx +12 -0
  60. package/templates/vite-template/tsconfig.app.json +25 -0
  61. package/templates/vite-template/tsconfig.json +11 -0
  62. package/templates/vite-template/tsconfig.node.json +14 -0
  63. package/templates/vite-template/vite.config.ts +10 -0
  64. package/tsconfig.json +18 -28
  65. package/dist/templates/next-cosmos-template/.eslintrc.json +0 -3
  66. package/dist/templates/next-cosmos-template/README.md +0 -60
  67. package/dist/templates/next-cosmos-template/next.config.mjs +0 -14
  68. package/dist/templates/next-cosmos-template/package.json +0 -31
  69. package/dist/templates/next-cosmos-template/public/next.svg +0 -1
  70. package/dist/templates/next-cosmos-template/public/vercel.svg +0 -1
  71. package/dist/templates/next-cosmos-template/src/app/components/Homepage/Examples.tsx +0 -177
  72. package/dist/templates/next-cosmos-template/src/app/components/Homepage/Homepage.css +0 -156
  73. package/dist/templates/next-cosmos-template/src/app/components/Homepage/Homepage.tsx +0 -110
  74. package/dist/templates/next-cosmos-template/src/app/components/WalletConnectButton/WalletConnectButton.tsx +0 -26
  75. package/dist/templates/next-cosmos-template/src/app/components/Web3Provider.tsx +0 -39
  76. package/dist/templates/next-cosmos-template/src/app/components/index.ts +0 -3
  77. package/dist/templates/next-cosmos-template/src/app/constants/chain.ts +0 -16
  78. package/dist/templates/next-cosmos-template/src/app/constants/index.ts +0 -1
  79. package/dist/templates/next-cosmos-template/src/app/index.css +0 -171
  80. package/dist/templates/next-cosmos-template/src/app/layout.tsx +0 -21
  81. package/dist/templates/next-cosmos-template/src/app/page.tsx +0 -17
  82. package/dist/templates/next-cosmos-template/tsconfig.json +0 -26
  83. package/dist/templates/next-cosmos-template/yarn.lock +0 -9814
  84. package/dist/templates/next-wagmi-template/.eslintrc.json +0 -3
  85. package/dist/templates/next-wagmi-template/package.json +0 -30
  86. package/dist/templates/next-wagmi-template/src/app/components/Homepage/Examples.tsx +0 -271
  87. package/dist/templates/next-wagmi-template/src/app/components/Homepage/Homepage.css +0 -156
  88. package/dist/templates/next-wagmi-template/src/app/components/index.ts +0 -2
  89. package/dist/templates/next-wagmi-template/src/app/constants/index.ts +0 -1
  90. package/dist/templates/next-wagmi-template/src/app/index.css +0 -171
  91. package/dist/templates/next-wagmi-template/src/app/layout.tsx +0 -21
  92. package/dist/templates/next-wagmi-template/src/app/page.tsx +0 -21
  93. package/dist/templates/next-wagmi-template/tsconfig.json +0 -26
  94. package/dist/templates/vite-cosmos-template/.eslintrc.cjs +0 -18
  95. package/dist/templates/vite-cosmos-template/README.md +0 -72
  96. package/dist/templates/vite-cosmos-template/index.html +0 -16
  97. package/dist/templates/vite-cosmos-template/package.json +0 -35
  98. package/dist/templates/vite-cosmos-template/src/App.tsx +0 -16
  99. package/dist/templates/vite-cosmos-template/src/components/Homepage/Examples.tsx +0 -177
  100. package/dist/templates/vite-cosmos-template/src/components/Homepage/Homepage.css +0 -156
  101. package/dist/templates/vite-cosmos-template/src/components/Homepage/Homepage.tsx +0 -102
  102. package/dist/templates/vite-cosmos-template/src/components/WalletConnectButton/WalletConnectButton.tsx +0 -26
  103. package/dist/templates/vite-cosmos-template/src/components/Web3Provider.tsx +0 -45
  104. package/dist/templates/vite-cosmos-template/src/components/index.ts +0 -4
  105. package/dist/templates/vite-cosmos-template/src/constants/chain.ts +0 -16
  106. package/dist/templates/vite-cosmos-template/src/constants/index.ts +0 -1
  107. package/dist/templates/vite-cosmos-template/src/index.css +0 -171
  108. package/dist/templates/vite-cosmos-template/src/main.tsx +0 -12
  109. package/dist/templates/vite-cosmos-template/tsconfig.app.json +0 -27
  110. package/dist/templates/vite-cosmos-template/tsconfig.json +0 -11
  111. package/dist/templates/vite-cosmos-template/tsconfig.node.json +0 -14
  112. package/dist/templates/vite-cosmos-template/vite.config.ts +0 -7
  113. package/dist/templates/vite-cosmos-template/yarn.lock +0 -9323
  114. package/dist/templates/vite-wagmi-template/.eslintrc.cjs +0 -18
  115. package/dist/templates/vite-wagmi-template/package.json +0 -33
  116. package/dist/templates/vite-wagmi-template/src/App.tsx +0 -22
  117. package/dist/templates/vite-wagmi-template/src/components/Homepage/Examples.tsx +0 -269
  118. package/dist/templates/vite-wagmi-template/src/components/Homepage/Homepage.css +0 -156
  119. package/dist/templates/vite-wagmi-template/src/components/Homepage/Homepage.tsx +0 -106
  120. package/dist/templates/vite-wagmi-template/src/constants/index.ts +0 -1
  121. package/dist/templates/vite-wagmi-template/src/index.css +0 -170
  122. package/dist/templates/vite-wagmi-template/src/main.tsx +0 -12
  123. package/dist/templates/vite-wagmi-template/tsconfig.app.json +0 -27
  124. package/dist/templates/vite-wagmi-template/tsconfig.json +0 -11
  125. package/dist/templates/vite-wagmi-template/tsconfig.node.json +0 -14
  126. package/dist/templates/vite-wagmi-template/vite.config.ts +0 -10
  127. package/templates/next-cosmos-template/.eslintrc.json +0 -3
  128. package/templates/next-cosmos-template/README.md +0 -60
  129. package/templates/next-cosmos-template/next-env.d.ts +0 -5
  130. package/templates/next-cosmos-template/next.config.mjs +0 -14
  131. package/templates/next-cosmos-template/package.json +0 -31
  132. package/templates/next-cosmos-template/public/next.svg +0 -1
  133. package/templates/next-cosmos-template/public/sei-logotype.svg +0 -15
  134. package/templates/next-cosmos-template/public/vercel.svg +0 -1
  135. package/templates/next-cosmos-template/src/app/components/Homepage/Examples.tsx +0 -177
  136. package/templates/next-cosmos-template/src/app/components/Homepage/Homepage.css +0 -156
  137. package/templates/next-cosmos-template/src/app/components/Homepage/Homepage.tsx +0 -110
  138. package/templates/next-cosmos-template/src/app/components/WalletConnectButton/WalletConnectButton.tsx +0 -26
  139. package/templates/next-cosmos-template/src/app/components/Web3Provider.tsx +0 -39
  140. package/templates/next-cosmos-template/src/app/components/index.ts +0 -3
  141. package/templates/next-cosmos-template/src/app/constants/chain.ts +0 -16
  142. package/templates/next-cosmos-template/src/app/constants/index.ts +0 -1
  143. package/templates/next-cosmos-template/src/app/favicon.ico +0 -0
  144. package/templates/next-cosmos-template/src/app/index.css +0 -171
  145. package/templates/next-cosmos-template/src/app/layout.tsx +0 -21
  146. package/templates/next-cosmos-template/src/app/page.tsx +0 -17
  147. package/templates/next-cosmos-template/tsconfig.json +0 -26
  148. package/templates/next-cosmos-template/yarn.lock +0 -9814
  149. package/templates/next-wagmi-template/.eslintrc.json +0 -3
  150. package/templates/next-wagmi-template/next-env.d.ts +0 -5
  151. package/templates/next-wagmi-template/package.json +0 -30
  152. package/templates/next-wagmi-template/public/sei-logotype.svg +0 -15
  153. package/templates/next-wagmi-template/src/app/components/Homepage/Examples.tsx +0 -271
  154. package/templates/next-wagmi-template/src/app/components/Homepage/Homepage.css +0 -156
  155. package/templates/next-wagmi-template/src/app/components/index.ts +0 -2
  156. package/templates/next-wagmi-template/src/app/constants/index.ts +0 -1
  157. package/templates/next-wagmi-template/src/app/favicon.ico +0 -0
  158. package/templates/next-wagmi-template/src/app/index.css +0 -171
  159. package/templates/next-wagmi-template/src/app/layout.tsx +0 -21
  160. package/templates/next-wagmi-template/src/app/page.tsx +0 -21
  161. package/templates/next-wagmi-template/tsconfig.json +0 -26
  162. package/templates/vite-cosmos-template/.eslintrc.cjs +0 -18
  163. package/templates/vite-cosmos-template/README.md +0 -72
  164. package/templates/vite-cosmos-template/favicon.ico +0 -0
  165. package/templates/vite-cosmos-template/index.html +0 -16
  166. package/templates/vite-cosmos-template/package.json +0 -35
  167. package/templates/vite-cosmos-template/public/sei-logotype.svg +0 -15
  168. package/templates/vite-cosmos-template/src/App.tsx +0 -16
  169. package/templates/vite-cosmos-template/src/assets/react.svg +0 -1
  170. package/templates/vite-cosmos-template/src/components/Homepage/Examples.tsx +0 -177
  171. package/templates/vite-cosmos-template/src/components/Homepage/Homepage.css +0 -156
  172. package/templates/vite-cosmos-template/src/components/Homepage/Homepage.tsx +0 -102
  173. package/templates/vite-cosmos-template/src/components/WalletConnectButton/WalletConnectButton.tsx +0 -26
  174. package/templates/vite-cosmos-template/src/components/Web3Provider.tsx +0 -45
  175. package/templates/vite-cosmos-template/src/components/index.ts +0 -4
  176. package/templates/vite-cosmos-template/src/constants/chain.ts +0 -16
  177. package/templates/vite-cosmos-template/src/constants/index.ts +0 -1
  178. package/templates/vite-cosmos-template/src/index.css +0 -171
  179. package/templates/vite-cosmos-template/src/main.tsx +0 -12
  180. package/templates/vite-cosmos-template/src/vite-env.d.ts +0 -1
  181. package/templates/vite-cosmos-template/tsconfig.app.json +0 -27
  182. package/templates/vite-cosmos-template/tsconfig.json +0 -11
  183. package/templates/vite-cosmos-template/tsconfig.node.json +0 -14
  184. package/templates/vite-cosmos-template/vite.config.ts +0 -7
  185. package/templates/vite-cosmos-template/yarn.lock +0 -9323
  186. package/templates/vite-wagmi-template/.eslintrc.cjs +0 -18
  187. package/templates/vite-wagmi-template/favicon.ico +0 -0
  188. package/templates/vite-wagmi-template/package.json +0 -33
  189. package/templates/vite-wagmi-template/public/sei-logotype.svg +0 -15
  190. package/templates/vite-wagmi-template/src/App.tsx +0 -22
  191. package/templates/vite-wagmi-template/src/assets/react.svg +0 -1
  192. package/templates/vite-wagmi-template/src/components/Homepage/Examples.tsx +0 -269
  193. package/templates/vite-wagmi-template/src/components/Homepage/Homepage.css +0 -156
  194. package/templates/vite-wagmi-template/src/components/Homepage/Homepage.tsx +0 -106
  195. package/templates/vite-wagmi-template/src/constants/index.ts +0 -1
  196. package/templates/vite-wagmi-template/src/index.css +0 -170
  197. package/templates/vite-wagmi-template/src/main.tsx +0 -12
  198. package/templates/vite-wagmi-template/src/vite-env.d.ts +0 -1
  199. package/templates/vite-wagmi-template/tsconfig.app.json +0 -27
  200. package/templates/vite-wagmi-template/tsconfig.json +0 -11
  201. package/templates/vite-wagmi-template/tsconfig.node.json +0 -14
  202. package/templates/vite-wagmi-template/vite.config.ts +0 -10
  203. /package/dist/templates/{next-wagmi-template → next-template}/README.md +0 -0
  204. /package/dist/templates/{next-cosmos-template → next-template}/next-env.d.ts +0 -0
  205. /package/dist/templates/{next-wagmi-template → next-template}/next.config.mjs +0 -0
  206. /package/dist/templates/{next-cosmos-template → next-template}/public/sei-logotype.svg +0 -0
  207. /package/dist/templates/{next-cosmos-template → next-template}/src/app/favicon.ico +0 -0
  208. /package/dist/templates/{next-wagmi-template → next-template}/yarn.lock +0 -0
  209. /package/dist/templates/{vite-wagmi-template → vite-template}/README.md +0 -0
  210. /package/dist/templates/{next-wagmi-template/src/app → vite-template}/favicon.ico +0 -0
  211. /package/dist/templates/{vite-wagmi-template → vite-template}/index.html +0 -0
  212. /package/dist/templates/{next-wagmi-template → vite-template}/public/sei-logotype.svg +0 -0
  213. /package/dist/templates/{vite-cosmos-template → vite-template}/src/assets/react.svg +0 -0
  214. /package/dist/templates/{vite-cosmos-template → vite-template}/src/vite-env.d.ts +0 -0
  215. /package/dist/templates/{vite-wagmi-template → vite-template}/yarn.lock +0 -0
  216. /package/templates/{next-wagmi-template → next-template}/README.md +0 -0
  217. /package/{dist/templates/next-wagmi-template → templates/next-template}/next-env.d.ts +0 -0
  218. /package/templates/{next-wagmi-template → next-template}/next.config.mjs +0 -0
  219. /package/{dist/templates/vite-cosmos-template → templates/next-template}/public/sei-logotype.svg +0 -0
  220. /package/{dist/templates/vite-cosmos-template → templates/next-template/src/app}/favicon.ico +0 -0
  221. /package/templates/{next-wagmi-template → next-template}/yarn.lock +0 -0
  222. /package/templates/{vite-wagmi-template → vite-template}/README.md +0 -0
  223. /package/{dist/templates/vite-wagmi-template → templates/vite-template}/favicon.ico +0 -0
  224. /package/templates/{vite-wagmi-template → vite-template}/index.html +0 -0
  225. /package/{dist/templates/vite-wagmi-template → templates/vite-template}/public/sei-logotype.svg +0 -0
  226. /package/{dist/templates/vite-wagmi-template → templates/vite-template}/src/assets/react.svg +0 -0
  227. /package/{dist/templates/vite-wagmi-template → templates/vite-template}/src/vite-env.d.ts +0 -0
  228. /package/templates/{vite-wagmi-template → vite-template}/yarn.lock +0 -0
@@ -0,0 +1,257 @@
1
+ 'use client';
2
+
3
+ import { BANK_PRECOMPILE_ABI, BANK_PRECOMPILE_ADDRESS, WASM_PRECOMPILE_ABI, WASM_PRECOMPILE_ADDRESS } from '@sei-js/evm';
4
+ import { useState } from 'react';
5
+ import { ReadContractParameters, formatEther, fromHex, parseEther, toHex } from 'viem';
6
+ import { useAccount, usePublicClient, useWriteContract } from 'wagmi';
7
+
8
+ import './Homepage.css';
9
+
10
+ function Examples() {
11
+ const [balance, setBalance] = useState('');
12
+ const [supply, setSupply] = useState('');
13
+ const [count, setCount] = useState(0);
14
+
15
+ const publicClient = usePublicClient();
16
+ const { address } = useAccount();
17
+ const { writeContractAsync } = useWriteContract();
18
+
19
+ const formatLargeSeiNumber = (num: string, decimals: number): string => {
20
+ if (num.length > 10) {
21
+ return (
22
+ (Number(num) / 1000000 / 1000000000).toLocaleString(navigator.language, { minimumFractionDigits: decimals, maximumFractionDigits: decimals }) + ' B'
23
+ );
24
+ } else {
25
+ return (Number(num) / 1000000).toLocaleString(navigator.language);
26
+ }
27
+ };
28
+
29
+ const copyToClipboard = (text: string) => {
30
+ try {
31
+ navigator.clipboard.writeText(text);
32
+ } catch (err) {
33
+ console.error('Failed to copy text: ', err);
34
+ } finally {
35
+ alert('Copied to clipboard!');
36
+ }
37
+ };
38
+
39
+ const renderAddressExample = () => {
40
+ return (
41
+ <div className="card">
42
+ <div className="card-header">
43
+ <p className="card__title">Wallet address</p>
44
+ <small className="card__description">
45
+ <a href="https://viem.sh/docs/clients/public.html" target="_blank">
46
+ Viem Public Client
47
+ </a>{' '}
48
+ query example
49
+ </small>
50
+ </div>
51
+ <div className="card-body">
52
+ <div className="content-background space-between">
53
+ {address ? (
54
+ <div>
55
+ <p className="card-footer">{address}</p>
56
+ </div>
57
+ ) : (
58
+ <p> --- </p>
59
+ )}
60
+
61
+ <button className="small outline" onClick={() => copyToClipboard(address as string)}>
62
+ Copy
63
+ </button>
64
+ </div>
65
+ </div>
66
+ <div className="card-footer"></div>
67
+ </div>
68
+ );
69
+ };
70
+
71
+ const getBalanceWagmi = async () => {
72
+ if (!address || !publicClient) {
73
+ return undefined;
74
+ }
75
+ const weiBalance = await publicClient.getBalance({ address });
76
+ const seiBalance = formatEther(weiBalance);
77
+ setBalance(seiBalance);
78
+ };
79
+
80
+ const renderBalanceExample = () => {
81
+ return (
82
+ <div className="card">
83
+ <div className="card-header">
84
+ <p className="card__title">Wallet balance</p>
85
+ <small className="card__description">
86
+ <a href="https://viem.sh/docs/clients/public.html" target="_blank">
87
+ Viem Public Client
88
+ </a>{' '}
89
+ query example
90
+ </small>
91
+ </div>
92
+ <div className="card-body">
93
+ <div className="content-background space-between">
94
+ <small>SEI</small>
95
+ <p>{balance ? balance : '---'} SEI</p>
96
+ </div>
97
+ </div>
98
+ <div className="card-footer">
99
+ <button onClick={getBalanceWagmi}>Fetch balance</button>
100
+ </div>
101
+ </div>
102
+ );
103
+ };
104
+
105
+ // Example of using precompiles to query native Sei modules.
106
+ const getBankSupply = async () => {
107
+ if (!publicClient) {
108
+ return;
109
+ }
110
+
111
+ const params: ReadContractParameters = {
112
+ address: BANK_PRECOMPILE_ADDRESS,
113
+ abi: BANK_PRECOMPILE_ABI,
114
+ functionName: 'supply',
115
+ args: ['usei']
116
+ };
117
+ try {
118
+ const response = (await publicClient.readContract(params)) as BigInt;
119
+ const supply = formatLargeSeiNumber(response.toString(), 1);
120
+ setSupply(supply);
121
+ } catch (e) {
122
+ console.log(e);
123
+ }
124
+ };
125
+
126
+ const renderBankSupplyExample = () => {
127
+ return (
128
+ <div className="card">
129
+ <div className="card-header">
130
+ <p className="card__title">Total Sei supply</p>
131
+ <small className="card__description">
132
+ <a href="https://www.docs.sei.io/dev-interoperability/precompiles/bank" target="_blank">
133
+ {' '}
134
+ Bank precompile
135
+ </a>{' '}
136
+ example for querying native Sei modules
137
+ </small>
138
+ </div>
139
+ <div className="card-body">
140
+ <div className="content-background space-between">
141
+ <small>SEI</small>
142
+ <p>{supply}</p>
143
+ </div>
144
+ </div>
145
+ <div className="card-footer">
146
+ <button onClick={getBankSupply}>Fetch supply</button>
147
+ </div>
148
+ </div>
149
+ );
150
+ };
151
+
152
+ // Fetch count of a CosmWasm Contract using WASM Precompile
153
+ const fetchCount = async () => {
154
+ if (!publicClient) {
155
+ return;
156
+ }
157
+
158
+ const COUNTER_CONTRACT_ADDRESS = 'sei14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sh9m79m';
159
+
160
+ const queryMsg = toHex(JSON.stringify({ get_count: {} }));
161
+
162
+ const params: ReadContractParameters = {
163
+ address: WASM_PRECOMPILE_ADDRESS,
164
+ abi: WASM_PRECOMPILE_ABI,
165
+ functionName: 'query',
166
+ args: [COUNTER_CONTRACT_ADDRESS, queryMsg]
167
+ };
168
+ try {
169
+ const response = (await publicClient?.readContract(params)) as `0x${string}`;
170
+ const { count } = JSON.parse(fromHex(response, 'string'));
171
+ setCount(count);
172
+ } catch (e) {
173
+ console.log(e);
174
+ }
175
+ };
176
+
177
+ // Fetch count of a CosmWasm Contract using WASM Precompile
178
+ const incrementCounter = async () => {
179
+ if (!address || !publicClient) {
180
+ return;
181
+ }
182
+
183
+ const COUNTER_CONTRACT_ADDRESS = 'sei14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sh9m79m';
184
+
185
+ const execMsg = toHex(JSON.stringify({ increment: {} }));
186
+ const coins = toHex('[]');
187
+ const params = {
188
+ account: address,
189
+ address: WASM_PRECOMPILE_ADDRESS,
190
+ abi: WASM_PRECOMPILE_ABI,
191
+ functionName: 'execute',
192
+ args: [COUNTER_CONTRACT_ADDRESS, execMsg, coins],
193
+ value: parseEther('0')
194
+ };
195
+
196
+ try {
197
+ const estimatedGas = await publicClient.estimateContractGas(params);
198
+
199
+ // Call smart contract execute msg
200
+ await writeContractAsync({ ...params, gas: estimatedGas });
201
+
202
+ // Wait for 1 block to confirm transaction
203
+ setTimeout(() => {}, 400);
204
+ await fetchCount();
205
+ } catch (error) {
206
+ console.log(error);
207
+ }
208
+ };
209
+
210
+ const renderCounterContractExample = () => {
211
+ return (
212
+ <div className="card">
213
+ <div className="card-header">
214
+ <p className="card__title">Smart contract interaction</p>
215
+ <small>
216
+ <a href="https://www.docs.sei.io/dev-interoperability/precompiles/cosmwasm" target="_blank">
217
+ WASM Precompile
218
+ </a>{' '}
219
+ example of CosmWasm smart contract interaction
220
+ </small>
221
+ </div>
222
+ <div className="card-body">
223
+ <div className="content-background space-between">
224
+ <small>Count</small>
225
+ <p>{count}</p>
226
+ <button className="small outline" onClick={incrementCounter}>
227
+ Increase
228
+ </button>
229
+ </div>
230
+ </div>
231
+ <div className="card-footer">
232
+ <button onClick={fetchCount}>Fetch count</button>
233
+ </div>
234
+ </div>
235
+ );
236
+ };
237
+
238
+ return (
239
+ <div className="container">
240
+ <div className="grid">
241
+ {/* First card */}
242
+ {renderAddressExample()}
243
+
244
+ {/* Second card */}
245
+ {renderBalanceExample()}
246
+
247
+ {/* Third card */}
248
+ {renderBankSupplyExample()}
249
+
250
+ {/* Fourth card */}
251
+ {renderCounterContractExample()}
252
+ </div>
253
+ </div>
254
+ );
255
+ }
256
+
257
+ export default Examples;
@@ -0,0 +1,154 @@
1
+ #root {
2
+ display: flex;
3
+ flex-direction: column;
4
+ min-height: 100vh;
5
+ }
6
+ .app {
7
+ width: 100%;
8
+ height: 100%;
9
+ }
10
+
11
+ .logo {
12
+ width: 20%;
13
+ align-self: center;
14
+ }
15
+
16
+ .container {
17
+ margin: 0 auto;
18
+ display: flex;
19
+ flex-direction: column;
20
+ gap: 3rem;
21
+ width: 100%;
22
+ padding: 1rem;
23
+ height: -webkit-fill-available;
24
+ flex-grow: 1;
25
+ justify-content: center;
26
+ }
27
+
28
+ .grid {
29
+ width: 100%;
30
+ display: grid;
31
+ grid-template-columns: repeat(1, 1fr);
32
+ gap: 1rem;
33
+ }
34
+ .grid.docs {
35
+ grid-template-columns: repeat(1, 1fr);
36
+ }
37
+
38
+ .card {
39
+ width: 100%;
40
+ padding: 1.5em;
41
+ border-radius: 1rem;
42
+ background: var(--card);
43
+ color: var(--card-foreground);
44
+ box-shadow: 0px 4px 6px 0px rgba(0, 0, 0, 0.09);
45
+ }
46
+
47
+ .card.secondary {
48
+ background: transparent;
49
+ border: 1px solid var(--border);
50
+ box-shadow: none;
51
+ }
52
+ .card.intro {
53
+ display: flex;
54
+ flex-direction: column;
55
+ gap: 1rem;
56
+ justify-content: space-between;
57
+ align-items: flex-start;
58
+ }
59
+ .card-header {
60
+ display: flex;
61
+ flex-direction: column;
62
+ justify-content: space-between;
63
+ gap: 0.25rem;
64
+ }
65
+ .card-body {
66
+ display: flex;
67
+ flex-direction: column;
68
+ justify-content: space-between;
69
+ margin: 1.5rem 0;
70
+ }
71
+
72
+ .card-footer {
73
+ display: flex;
74
+ flex-direction: row;
75
+ gap: 0.5rem;
76
+ }
77
+
78
+ .card__title {
79
+ font-size: 1.15rem;
80
+ font-weight: 600;
81
+ }
82
+ .content-background {
83
+ overflow: hidden;
84
+ background: #fafaf9;
85
+ border-radius: 4rem;
86
+ padding: 0 1rem;
87
+ height: 3.5rem;
88
+ display: flex;
89
+ align-items: center;
90
+ }
91
+
92
+ .wallet-address {
93
+ text-wrap: anywhere;
94
+ line-break: anywhere;
95
+ }
96
+
97
+ .space-between {
98
+ justify-content: space-between;
99
+ gap: 1rem;
100
+ }
101
+
102
+ .hide-on-mobile {
103
+ display: none;
104
+ }
105
+
106
+ .hide-on-desktop {
107
+ display: block;
108
+ }
109
+
110
+ .external-link {
111
+ display: inline-flex;
112
+ gap: 0.25rem;
113
+ }
114
+
115
+ .get-started {
116
+ text-align: center;
117
+ }
118
+
119
+ .wallet-connect {
120
+ display: flex;
121
+ gap: 1rem;
122
+ align-items: center;
123
+ }
124
+
125
+ @media (min-width: 768px) {
126
+ .card.intro {
127
+ grid-column: span 2;
128
+ flex-direction: row;
129
+ align-items: center;
130
+ }
131
+ .hide-on-mobile {
132
+ display: block;
133
+ }
134
+ .hide-on-desktop {
135
+ display: none;
136
+ }
137
+
138
+ .container {
139
+ max-width: 96rem;
140
+ padding: 2rem;
141
+ }
142
+ .grid {
143
+ grid-template-columns: repeat(2, 1fr);
144
+ }
145
+ .grid.docs {
146
+ grid-template-columns: repeat(2, 1fr);
147
+ }
148
+ }
149
+
150
+ @media (min-width: 1024px) {
151
+ .container {
152
+ max-width: 80rem;
153
+ }
154
+ }
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { ConnectButton } from '@rainbow-me/rainbowkit';
4
4
  import Examples from './Examples';
5
- import "./Homepage.css"
5
+ import './Homepage.css';
6
6
 
7
7
  type HelpItem = {
8
8
  title: string;
@@ -14,13 +14,11 @@ const renderHelpItem = ({ title, description, link }: HelpItem) => (
14
14
  <div className="card secondary">
15
15
  <div className="card-header">
16
16
  <p className="card__title">
17
- <a href={link} target='_blank' rel='noopener noreferrer' className="external-link">
17
+ <a href={link} target="_blank" rel="noopener noreferrer" className="external-link">
18
18
  {title} {externalIcon}
19
19
  </a>
20
20
  </p>
21
- <small className="card__description">
22
- {description}
23
- </small>
21
+ <small className="card__description">{description}</small>
24
22
  </div>
25
23
  </div>
26
24
  );
@@ -49,13 +47,7 @@ const helpItems: HelpItem[] = [
49
47
  ];
50
48
 
51
49
  const externalIcon = (
52
- <svg
53
- width="16"
54
- height="16"
55
- viewBox="0 0 16 16"
56
- fill="none"
57
- xmlns="http://www.w3.org/2000/svg"
58
- >
50
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
59
51
  <path
60
52
  d="M12 8.66667V12.6667C12 13.0203 11.8595 13.3594 11.6095 13.6095C11.3594 13.8595 11.0203 14 10.6667 14H3.33333C2.97971 14 2.64057 13.8595 2.39052 13.6095C2.14048 13.3594 2 13.0203 2 12.6667V5.33333C2 4.97971 2.14048 4.64057 2.39052 4.39052C2.64057 4.14048 2.97971 4 3.33333 4H7.33333"
61
53
  stroke="#9F1239"
@@ -63,34 +55,19 @@ const externalIcon = (
63
55
  strokeLinecap="round"
64
56
  strokeLinejoin="round"
65
57
  />
66
- <path
67
- d="M10 2H14V6"
68
- stroke="#9F1239"
69
- strokeWidth="1.33333"
70
- strokeLinecap="round"
71
- strokeLinejoin="round"
72
- />
73
- <path
74
- d="M6.66663 9.33333L14 2"
75
- stroke="#9F1239"
76
- strokeWidth="1.33333"
77
- strokeLinecap="round"
78
- strokeLinejoin="round"
79
- />
58
+ <path d="M10 2H14V6" stroke="#9F1239" strokeWidth="1.33333" strokeLinecap="round" strokeLinejoin="round" />
59
+ <path d="M6.66663 9.33333L14 2" stroke="#9F1239" strokeWidth="1.33333" strokeLinecap="round" strokeLinejoin="round" />
80
60
  </svg>
81
61
  );
82
62
 
83
63
  function Homepage() {
84
-
85
64
  return (
86
65
  <div className="container">
87
66
  <img src="sei-logotype.svg" className="logo" alt="SEI logotype" />
88
67
  <div className="card intro">
89
68
  <div className="card-header">
90
69
  <p className="card__title">Wallet address</p>
91
- <small className="card__description">
92
- Connect wallet to see your address and balance
93
- </small>
70
+ <small className="card__description">Connect wallet to see your address and balance</small>
94
71
  </div>
95
72
  <ConnectButton />
96
73
  </div>
@@ -99,12 +76,9 @@ function Homepage() {
99
76
  Get started by editing <code>src/app/page.tsx</code>
100
77
  </div>
101
78
  <div className="grid docs">
102
- {
103
- helpItems.map((item, index) => (
104
- <div key={item.title}>
105
- {renderHelpItem(item)}
106
- </div>))
107
- }
79
+ {helpItems.map((item, index) => (
80
+ <div key={item.title}>{renderHelpItem(item)}</div>
81
+ ))}
108
82
  </div>
109
83
  </div>
110
84
  );
@@ -17,18 +17,18 @@ interface Web3ProviderProps {
17
17
  }
18
18
 
19
19
  const connectors = connectorsForWallets(
20
- [
21
- {
22
- groupName: 'Recommended',
23
- wallets: [metaMaskWallet],
24
- },
25
- ],
26
- {
27
- appName: '<YOUR_APPNAME_HERE>',
28
- projectId: "<YOUR_ID_HERE>",
29
- }
30
- );
31
-
20
+ [
21
+ {
22
+ groupName: 'Recommended',
23
+ wallets: [metaMaskWallet]
24
+ }
25
+ ],
26
+ {
27
+ appName: '<YOUR_APPNAME_HERE>',
28
+ projectId: '<YOUR_ID_HERE>'
29
+ }
30
+ );
31
+
32
32
  function Web3Provider({ children }: Web3ProviderProps) {
33
33
  // Buffer polyfill
34
34
  if (typeof window !== 'undefined') {
@@ -50,22 +50,23 @@ function Web3Provider({ children }: Web3ProviderProps) {
50
50
  return (
51
51
  <WagmiProvider config={config}>
52
52
  <QueryClientProvider client={queryClient}>
53
- <RainbowKitProvider
54
- theme={lightTheme({
55
- accentColor: '#7e1914',
56
- accentColorForeground: 'white',
57
- borderRadius: 'medium',
58
- fontStack: 'system',
59
- })}
60
- appInfo={{
61
- appName: '<APP-NAME-HERE>',
62
- learnMoreUrl: 'https://www.docs.sei.io/user-guides/wallet-setup'
63
- }}
64
- modalSize='compact'
65
- initialChain={chainConfig.id}>
66
- {children}
67
- </RainbowKitProvider>
68
- </QueryClientProvider>
53
+ <RainbowKitProvider
54
+ theme={lightTheme({
55
+ accentColor: '#7e1914',
56
+ accentColorForeground: 'white',
57
+ borderRadius: 'medium',
58
+ fontStack: 'system'
59
+ })}
60
+ appInfo={{
61
+ appName: '<APP-NAME-HERE>',
62
+ learnMoreUrl: 'https://www.docs.sei.io/user-guides/wallet-setup'
63
+ }}
64
+ modalSize="compact"
65
+ initialChain={chainConfig.id}
66
+ >
67
+ {children}
68
+ </RainbowKitProvider>
69
+ </QueryClientProvider>
69
70
  </WagmiProvider>
70
71
  );
71
72
  }
@@ -0,0 +1,2 @@
1
+ export * from './Homepage/Homepage';
2
+ export * from './Web3Provider';
@@ -1,7 +1,7 @@
1
1
  // Set your selected chain here
2
- import { seiDevnet } from "viem/chains";
2
+ import { seiDevnet } from 'viem/chains';
3
3
 
4
4
  // Set your selected chain here
5
5
  // To point to mainnet, use sei.
6
6
  // To point to testnet, use seiTestnet.
7
- export const selectedChain = seiDevnet
7
+ export const selectedChain = seiDevnet;
@@ -0,0 +1 @@
1
+ export * from './chain';