ryt-sdk 1.0.11 → 1.0.12
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.
- package/README.md +159 -5
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -33,7 +33,156 @@ or
|
|
|
33
33
|
|
|
34
34
|
<br>
|
|
35
35
|
|
|
36
|
-
###
|
|
36
|
+
### 🌐 Frontend Dapp Setup (Browser Mode)
|
|
37
|
+
|
|
38
|
+
<br>
|
|
39
|
+
|
|
40
|
+
RYT SDK supports browser-based dApps using injected wallets such as:
|
|
41
|
+
|
|
42
|
+
- MetaMask
|
|
43
|
+
- Rabby
|
|
44
|
+
- Coinbase Wallet
|
|
45
|
+
|
|
46
|
+
No private keys are required in frontend mode.
|
|
47
|
+
|
|
48
|
+
<br>
|
|
49
|
+
|
|
50
|
+
### 💻 Frontend Example Dapp
|
|
51
|
+
|
|
52
|
+
<br>
|
|
53
|
+
|
|
54
|
+
```javascript
|
|
55
|
+
|
|
56
|
+
import { useState } from "react";
|
|
57
|
+
|
|
58
|
+
import {
|
|
59
|
+
RYTContract,
|
|
60
|
+
RYTWallet,
|
|
61
|
+
hasRYT,
|
|
62
|
+
requestAccounts,
|
|
63
|
+
RYTProvider,
|
|
64
|
+
parseTokenUnits,
|
|
65
|
+
} from "ryt-sdk";
|
|
66
|
+
|
|
67
|
+
const CONTRACT_ADDRESS = process.env.ERC20_ADDRESS; /* deploy erc20 token */
|
|
68
|
+
const CHAIN_ID= process.env.CHAIN_ID; /* provide chain id */
|
|
69
|
+
|
|
70
|
+
const ABI = [
|
|
71
|
+
"function approve(address spender, uint256 value) returns (bool)",
|
|
72
|
+
"function transfer(address to, uint256 value) returns (bool)",
|
|
73
|
+
"function decimals() view returns (uint8)",
|
|
74
|
+
];
|
|
75
|
+
|
|
76
|
+
function App() {
|
|
77
|
+
const [account, setAccount] = useState<string | null>(null);
|
|
78
|
+
const [contract, setContract] = useState<RYTContract | null>(null);
|
|
79
|
+
|
|
80
|
+
const [recipient, setRecipient] = useState("");
|
|
81
|
+
const [amount, setAmount] = useState("");
|
|
82
|
+
const [spender, setSpender] = useState("");
|
|
83
|
+
const [loading, setLoading] = useState(false);
|
|
84
|
+
const [txHash, setTxHash] = useState<string | null>(null);
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Connect wallet using RTY SDK
|
|
88
|
+
*/
|
|
89
|
+
const connectWallet = async () => {
|
|
90
|
+
try {
|
|
91
|
+
if (!hasRYT()) {
|
|
92
|
+
alert("Install MetaMask or compatible wallet");
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
setLoading(true);
|
|
97
|
+
|
|
98
|
+
// 1. request accounts via SDK
|
|
99
|
+
const accounts = await requestAccounts();
|
|
100
|
+
const address = accounts[0];
|
|
101
|
+
|
|
102
|
+
// 2. create provider via SDK
|
|
103
|
+
const provider = new RYTProvider({
|
|
104
|
+
chainId: CHAIN_ID,
|
|
105
|
+
rpcUrls: [process.env.RPC_URL] /* provide rpc url */
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
// 3. create wallet
|
|
109
|
+
const signer = await provider.getSigner();
|
|
110
|
+
const wallet = new RYTWallet(signer);
|
|
111
|
+
|
|
112
|
+
// 4. create contract instance via SDK
|
|
113
|
+
const rytContract = new RYTContract(
|
|
114
|
+
CONTRACT_ADDRESS,
|
|
115
|
+
ABI,
|
|
116
|
+
wallet
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
setAccount(address);
|
|
120
|
+
setContract(rytContract);
|
|
121
|
+
} catch (err) {
|
|
122
|
+
console.error(err);
|
|
123
|
+
} finally {
|
|
124
|
+
setLoading(false);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Approve tokens
|
|
130
|
+
*/
|
|
131
|
+
const handleApprove = async () => {
|
|
132
|
+
if (!contract) return alert("Connect wallet");
|
|
133
|
+
|
|
134
|
+
try {
|
|
135
|
+
setLoading(true);
|
|
136
|
+
|
|
137
|
+
const decimals = await contract.read("decimals");
|
|
138
|
+
|
|
139
|
+
const parsed = parseTokenUnits(amount, decimals);
|
|
140
|
+
|
|
141
|
+
const tx = await contract.write("approve", spender, parsed);
|
|
142
|
+
|
|
143
|
+
setTxHash(tx.hash);
|
|
144
|
+
await tx.wait();
|
|
145
|
+
} finally {
|
|
146
|
+
setLoading(false);
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Transfer tokens
|
|
152
|
+
*/
|
|
153
|
+
const handleTransfer = async () => {
|
|
154
|
+
if (!contract) return alert("Connect wallet");
|
|
155
|
+
|
|
156
|
+
try {
|
|
157
|
+
setLoading(true);
|
|
158
|
+
|
|
159
|
+
const decimals = await contract.read("decimals");
|
|
160
|
+
|
|
161
|
+
const parsed = parseTokenUnits(amount, decimals);
|
|
162
|
+
|
|
163
|
+
const tx = await contract.write("transfer", recipient, parsed);
|
|
164
|
+
|
|
165
|
+
setTxHash(tx.hash);
|
|
166
|
+
await tx.wait();
|
|
167
|
+
} finally {
|
|
168
|
+
setLoading(false);
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
return (/* Build your stunning UI here*/);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export default App;
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
<br>
|
|
180
|
+
|
|
181
|
+
### ⚡ Backend Quickstart Guide
|
|
182
|
+
|
|
183
|
+
<br>
|
|
184
|
+
|
|
185
|
+
#### 🔐 Environment Setup
|
|
37
186
|
|
|
38
187
|
<br>
|
|
39
188
|
|
|
@@ -55,13 +204,18 @@ MATH_LIB_ADDRESS=0xLibraryAddress
|
|
|
55
204
|
|
|
56
205
|
<br>
|
|
57
206
|
|
|
58
|
-
|
|
207
|
+
#### 💻 Code Example
|
|
208
|
+
|
|
59
209
|
<br>
|
|
60
210
|
|
|
211
|
+
|
|
61
212
|
```javascript
|
|
62
|
-
|
|
63
|
-
import
|
|
64
|
-
|
|
213
|
+
|
|
214
|
+
import {
|
|
215
|
+
RYTContract,
|
|
216
|
+
RYTWallet,
|
|
217
|
+
RYTProvider
|
|
218
|
+
} from "ryt-sdk";
|
|
65
219
|
|
|
66
220
|
const provider = new RYTProvider({
|
|
67
221
|
chainId: process.env.CHAIN_ID,
|
package/package.json
CHANGED