github.com/inklabsfoundation/inkchain@v0.17.1-0.20181025012015-c3cef8062f19/examples/xc/qtum/README.md (about) 1 ### Cross Chain 2 3 #### 1) Qtum Environment Setup. 4 5 ##### 1.1)Installing Docker 6 7 > https://docs.docker.com/engine/installation/ 8 > 9 ##### 1.2)Pull the Qtum Docker Image 10 11 ``` 12 $ cd qtum 13 $ sh download_images.sh 14 15 ``` 16 ##### 1.3)Installing solar 17 18 ``` 19 $ go get -u github.com/qtumproject/solar/cli/solar 20 ``` 21 ##### 1.4)Using the Qtum Docker 22 23 24 25 Starting up 26 ``` 27 $ cd qtum 28 $ sh start.sh 29 ``` 30 Stopping 31 ``` 32 $ cd qtum 33 $ sh stop.sh 34 ``` 35 Remove Containers 36 ``` 37 $ cd qtum 38 $ sh remove.sh 39 ``` 40 login 41 ``` 42 $ cd qtum 43 $ sh login.sh 44 ``` 45 46 #### 2)Script Commands. 47 48 ##### 2.1)Help 49 ``` 50 $ cd qtum 51 $ sh qtum-cli.sh help 52 ``` 53 ##### 2.2)Common commands 54 55 Get New Address 56 ``` 57 $ cd qtum 58 $ sh qtum-cli.sh getnewaddress 59 ``` 60 61 Get the account address 62 ``` 63 $ cd qtum 64 $ sh qtum-cli.sh getaccountaddress ${account} // lilei 65 ``` 66 67 Get Hex Address 68 ``` 69 $ cd qtum 70 $ sh qtum-cli.sh gethexaddress ${account_address} // qHhn8KTpfootyYy6Eo51dfR8kXn8s1Wv8i 71 ``` 72 73 fromhexaddress 74 ``` 75 $ cd qtum 76 $ sh qtum-cli.sh fromhexaddress ${account_hexaddress} // 019680a2de9e2d8753dfb86437ed52865f0a135c 77 ``` 78 79 Check accounts balance 80 ``` 81 $ cd qtum 82 $ sh qtum-cli.sh listaccounts 83 ``` 84 85 Send to address 86 ``` 87 $ cd qtum 88 $ sh qtum-cli.sh sendtoaddress ${toAccount} ${amount} // qHhn8KTpfootyYy6Eo51dfR8kXn8s1Wv8i 1000 89 ``` 90 91 List unspent 92 ``` 93 $ cd qtum 94 $ sh qtum-cli.sh listunspent 1 9999999 [\"${account_address}\"] // [\"qHhn8KTpfootyYy6Eo51dfR8kXn8s1Wv8i\\"] 95 ``` 96 97 List contracts 98 ``` 99 $ cd qtum 100 $ sh qtum-cli.sh listcontracts 101 ``` 102 103 Get Account Info 104 ``` 105 $ cd qtum 106 $ sh qtum-cli.sh getaccountinfo ${account_address} // contract address 107 ``` 108 109 Create contract 110 ``` 111 $ cd qtum 112 $ sh qtum-cli.sh createcontract ${bytecode} ${gasLimit} ${gasPrice} ${senderaddress} 113 ``` 114 115 Call contract 116 ``` 117 $ cd qtum 118 $ sh qtum-cli.sh callcontract ${contractaddress} ${bytecode} 119 ``` 120 121 Send to contract 122 ``` 123 $ cd qtum 124 $ sh qtum-cli.sh sendtocontract ${contractaddress} ${bytecode} 125 ``` 126 127 Estimate fee 128 ``` 129 $ cd qtum 130 $ sh qtum-cli.sh estimatefee ${contractaddress} ${bytecode} 131 ``` 132 133 #### 3)Deploy The Smart Contracts. 134 135 ##### 3.1)deploy 136 ``` 137 $ cd qtum/contracts 138 $ sh solar_deploy.sh 139 ``` 140 ##### 3.2)deploy status 141 ``` 142 $ cd qtum 143 $ sh solar_deploy_status.sh 144 ``` 145 146 #### 4) method signature 147 148 login 149 ``` 150 $ sh login.sh 151 $ qcli generate 600 152 ``` 153 154 #### 4.1) INK 155 ##### 4.1.1) allowance(address,address) 156 157 ``` 158 $ solar encode contracts/INK.sol allowance '["18ac89acd86ea466cfb964dd9847d72e427c7886","d6b39eb631df8ee60e46a576231ccf1fcd204a5e"]' 159 160 dd62ed3e00000000000000000000000018ac89acd86ea466cfb964dd9847d72e427c7886000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e 161 ``` 162 163 ##### 4.1.2) approve(address,uint256) 164 165 ``` 166 $ solar encode contracts/INK.sol approve '["d6b39eb631df8ee60e46a576231ccf1fcd204a5e",1000]' 167 168 095ea7b3000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e00000000000000000000000000000000000000000000000000000000000003e8 169 ``` 170 171 ##### 4.1.3) balanceOf(address) 172 173 ``` 174 $ solar encode contracts/INK.sol balanceOf '["18ac89acd86ea466cfb964dd9847d72e427c7886"]' 175 176 70a0823100000000000000000000000018ac89acd86ea466cfb964dd9847d72e427c7886 177 178 $ solar encode contracts/INK.sol balanceOf '["d6b39eb631df8ee60e46a576231ccf1fcd204a5e"]' 179 180 70a08231000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e 181 ``` 182 183 ##### 4.1.4) decimals() 184 185 ``` 186 $ solar encode contracts/INK.sol decimals 187 313ce567 188 ``` 189 190 ##### 4.1.5) totalSupply() 191 ``` 192 $ solar encode contracts/INK.sol totalSupply 193 18160ddd 194 ``` 195 196 ##### 4.1.6) transfer(address,uint256) 197 ``` 198 $ solar encode contracts/INK.sol transfer '["d6b39eb631df8ee60e46a576231ccf1fcd204a5e",1000]' 199 a9059cbb000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e00000000000000000000000000000000000000000000000000000000000003e8 200 ``` 201 202 ##### 4.1.7) transferFrom(address,address,uint256) 203 204 ``` 205 $ solar encode contracts/INK.sol transferFrom '["d6b39eb631df8ee60e46a576231ccf1fcd204a5e","d6b39eb631df8ee60e46a576231ccf1fcd204a5e",1000]' 206 23b872dd000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e00000000000000000000000000000000000000000000000000000000000003e8 207 ``` 208 209 ##### 4.1.8) name() 210 ``` 211 $ solar encode contracts/INK.sol name 212 06fdde03 213 ``` 214 215 ##### 4.1.9) symbol() 216 217 ``` 218 $ solar encode contracts/INK.sol symbol 219 95d89b41 220 ``` 221 222 ##### 4.1.10) decreaseApproval(address,uint256) 223 ``` 224 $ solar encode contracts/INK.sol decreaseApproval '["d6b39eb631df8ee60e46a576231ccf1fcd204a5e",1000]' 225 66188463000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e00000000000000000000000000000000000000000000000000000000000003e8 226 ``` 227 228 ##### 4.1.11) increaseApproval(address,uint256) 229 ``` 230 $ solar encode contracts/INK.sol increaseApproval '["d6b39eb631df8ee60e46a576231ccf1fcd204a5e",1000]' 231 d73dd623000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e00000000000000000000000000000000000000000000000000000000000003e8 232 ``` 233 234 ##### 4.1.12) approveAndCall(address,uint256,bytes) 235 ``` 236 $ solar encode contracts/INK.sol approveAndCall '["d6b39eb631df8ee60e46a576231ccf1fcd204a5e",1000,"41"]' 237 cae9ca51000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e00000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000014100000000000000000000000000000000000000000000000000000000000000 238 ``` 239 240 #### 4.2) XCPlugin 241 242 ##### 4.2.1) addCaller(address) 243 ``` 244 $ solar encode contracts/XCPlugin.sol addCaller '["d6b39eb631df8ee60e46a576231ccf1fcd204a5e"]' 245 747293fb000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e 246 ``` 247 248 ##### 4.2.2) addPlatform(bytes32) 249 ``` 250 $ solar encode contracts/XCPlugin.sol addPlatform '["7174756d00000000000000000000000000000000000000000000000000000000"]' 251 df8d66e47174756d00000000000000000000000000000000000000000000000000000000 252 ``` 253 ##### 4.2.3) addPublicKey(bytes32,address) 254 ``` 255 $ solar encode contracts/XCPlugin.sol addPublicKey '["4100000000000000000000000000000000000000000000000000000000000000","d6b39eb631df8ee60e46a576231ccf1fcd204a5e"]' 256 1de1ee7b4100000000000000000000000000000000000000000000000000000000000000000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e 257 ``` 258 ##### 4.2.4) callers(uint256) 259 ``` 260 $ solar encode contracts/XCPlugin.sol callers '[0]' 261 aa03fa3d0000000000000000000000000000000000000000000000000000000000000000 262 ``` 263 ##### 4.2.5) countOfPublicKey(bytes32) 264 ``` 265 $ solar encode contracts/XCPlugin.sol countOfPublicKey '["4100000000000000000000000000000000000000000000000000000000000000"]' 266 c79c91054100000000000000000000000000000000000000000000000000000000000000 267 ``` 268 ##### 4.2.6) deleteCaller(address) 269 ``` 270 $ solar encode contracts/XCPlugin.sol deleteCaller '["d6b39eb631df8ee60e46a576231ccf1fcd204a5e"]' 271 258c0f1e000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e 272 ``` 273 ##### 4.2.7) deletePlatform(bytes32) 274 ``` 275 $ solar encode contracts/XCPlugin.sol deletePlatform '["4100000000000000000000000000000000000000000000000000000000000000"]' 276 8147bcf74100000000000000000000000000000000000000000000000000000000000000 277 ``` 278 ##### 4.2.8) deleteProposal(bytes32,bytes32) 279 ``` 280 $ solar encode contracts/XCPlugin.sol deleteProposal '["4100000000000000000000000000000000000000000000000000000000000000","4100000000000000000000000000000000000000000000000000000000000000"]' 281 b56e0e3241000000000000000000000000000000000000000000000000000000000000004100000000000000000000000000000000000000000000000000000000000000 282 ``` 283 ##### 4.2.9) deletePublicKey(bytes32,address) 284 ``` 285 $ solar encode contracts/XCPlugin.sol deletePublicKey '["4100000000000000000000000000000000000000000000000000000000000000","d6b39eb631df8ee60e46a576231ccf1fcd204a5e"]' 286 fa31b3714100000000000000000000000000000000000000000000000000000000000000000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e 287 ``` 288 ##### 4.2.10) existPlatform(bytes32) 289 ``` 290 $ solar encode contracts/XCPlugin.sol existPlatform '["4100000000000000000000000000000000000000000000000000000000000000"]' 291 5de047d34100000000000000000000000000000000000000000000000000000000000000 292 ``` 293 ##### 4.2.11) getAdmin() 294 ``` 295 $ solar encode contracts/XCPlugin.sol getAdmin 296 6e9960c3 297 ``` 298 ##### 4.2.12) getPlatform(bytes32) 299 ``` 300 $ solar encode contracts/XCPlugin.sol getPlatform '["4100000000000000000000000000000000000000000000000000000000000000"]' 301 569cd4cb4100000000000000000000000000000000000000000000000000000000000000 302 ``` 303 ##### 4.2.13) getPlatformName() 304 ``` 305 $ solar encode contracts/XCPlugin.sol getPlatformName 306 db3b73db 307 ``` 308 ##### 4.2.14) getStatus() 309 ``` 310 $ solar encode contracts/XCPlugin.sol getStatus 311 4e69d560 312 ``` 313 ##### 4.2.15) getWeight(bytes32) 314 ``` 315 $ solar encode contracts/XCPlugin.sol getWeight '["4100000000000000000000000000000000000000000000000000000000000000"]' 316 66435abf4100000000000000000000000000000000000000000000000000000000000000 317 ``` 318 ##### 4.2.16) setAdmin(address) 319 ``` 320 $ solar encode contracts/XCPlugin.sol setAdmin '["d6b39eb631df8ee60e46a576231ccf1fcd204a5e"]' 321 704b6c02000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e 322 ``` 323 ##### 4.2.17) setPlatformName(bytes32) 324 ``` 325 $ solar encode contracts/XCPlugin.sol setPlatformName '["4100000000000000000000000000000000000000000000000000000000000000"]' 326 8d8992d34100000000000000000000000000000000000000000000000000000000000000 327 ``` 328 ##### 4.2.18) setWeight(bytes32,uint256) 329 ``` 330 $ solar encode contracts/XCPlugin.sol setWeight '["4100000000000000000000000000000000000000000000000000000000000000",3]' 331 71c4275a41000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 332 ``` 333 ##### 4.2.19) start() 334 ``` 335 $ solar encode contracts/XCPlugin.sol start 336 be9a6555 337 ``` 338 ##### 4.2.20) stop() 339 ``` 340 $ solar encode contracts/XCPlugin.sol stop 341 07da68f5 342 ``` 343 ##### 4.2.21) verifyProposal(bytes32,address,address,uint256,bytes32) 344 ``` 345 $ solar encode contracts/XCPlugin.sol verifyProposal '["4100000000000000000000000000000000000000000000000000000000000000","d6b39eb631df8ee60e46a576231ccf1fcd204a5e","d6b39eb631df8ee60e46a576231ccf1fcd204a5e",1000,"4200000000000000000000000000000000000000000000000000000000000000"]' 346 623aba4d4100000000000000000000000000000000000000000000000000000000000000000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e00000000000000000000000000000000000000000000000000000000000003e84200000000000000000000000000000000000000000000000000000000000000 347 ``` 348 349 ##### 4.2.22) voter(bytes32,address,address,uint256,bytes32,bytes32,bytes32,uint8) 350 ``` 351 $ solar encode contracts/XCPlugin.sol voter '["4100000000000000000000000000000000000000000000000000000000000000","d6b39eb631df8ee60e46a576231ccf1fcd204a5e","d6b39eb631df8ee60e46a576231ccf1fcd204a5e",1000,"4200000000000000000000000000000000000000000000000000000000000000","4100000000000000000000000000000000000000000000000000000000000000","4100000000000000000000000000000000000000000000000000000000000000",27]' 352 ffe6bf064100000000000000000000000000000000000000000000000000000000000000000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e00000000000000000000000000000000000000000000000000000000000003e8420000000000000000000000000000000000000000000000000000000000000041000000000000000000000000000000000000000000000000000000000000004100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b 353 ``` 354 355 #### 4.3) XC 356 357 ##### 4.3.1) getAdmin() 358 ``` 359 $ solar encode contracts/XC.sol getAdmin 360 6e9960c3 361 ``` 362 ##### 4.3.2) getINK() 363 ``` 364 $ solar encode contracts/XC.sol getINK 365 e5177ee4 366 ``` 367 ##### 4.3.3) getPlatformName() 368 ``` 369 $ solar encode contracts/XC.sol getPlatformName 370 db3b73db 371 ``` 372 ##### 4.3.4) getStatus() 373 ``` 374 $ solar encode contracts/XC.sol getStatus 375 4e69d560 376 ``` 377 ##### 4.3.5) getXCPlugin() 378 ``` 379 $ solar encode contracts/XC.sol getXCPlugin 380 4567a6a7 381 ``` 382 ##### 4.3.6) lock(bytes32,address,uint256) 383 ``` 384 $ solar encode contracts/XC.sol lock '["4100000000000000000000000000000000000000000000000000000000000000","d6b39eb631df8ee60e46a576231ccf1fcd204a5e",1000]' 385 0899146b4100000000000000000000000000000000000000000000000000000000000000000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e00000000000000000000000000000000000000000000000000000000000003e8 386 ``` 387 ##### 4.3.7) lockAdmin(bytes32,address,uint256) 388 ``` 389 $ solar encode contracts/XC.sol lockAdmin '["4100000000000000000000000000000000000000000000000000000000000000","d6b39eb631df8ee60e46a576231ccf1fcd204a5e",1000]' 390 30b36e6a4100000000000000000000000000000000000000000000000000000000000000000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e00000000000000000000000000000000000000000000000000000000000003e8 391 ``` 392 ##### 4.3.8) lockBalance() 393 ``` 394 $ solar encode contracts/XC.sol lockBalance 395 e228ecb4 396 ``` 397 ##### 4.3.9) setAdmin(address) 398 ``` 399 $ solar encode contracts/XC.sol setAdmin '["d6b39eb631df8ee60e46a576231ccf1fcd204a5e"]' 400 704b6c02000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e 401 ``` 402 ##### 4.3.10) setINK(address) 403 ``` 404 $ solar encode contracts/XC.sol setINK '["d6b39eb631df8ee60e46a576231ccf1fcd204a5e"]' 405 b8f23f52000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e 406 ``` 407 ##### 4.3.11) setPlatformName(bytes32) 408 ``` 409 $ solar encode contracts/XC.sol setPlatformName '["4100000000000000000000000000000000000000000000000000000000000000"]' 410 8d8992d34100000000000000000000000000000000000000000000000000000000000000 411 ``` 412 ##### 4.3.12) setXCPlugin(address) 413 ``` 414 $ solar encode contracts/XC.sol setXCPlugin '["d6b39eb631df8ee60e46a576231ccf1fcd204a5e"]' 415 8aa5440e000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e 416 ``` 417 ##### 4.3.13) start() 418 ``` 419 $ solar encode contracts/XC.sol start 420 be9a6555 421 ``` 422 ##### 4.3.14) stop() 423 ``` 424 $ solar encode contracts/XC.sol stop 425 07da68f5 426 ``` 427 ##### 4.3.15) unlock(bytes32,bytes32,address,address,uint256) 428 ``` 429 $ solar encode contracts/XC.sol unlock '["4100000000000000000000000000000000000000000000000000000000000000","4100000000000000000000000000000000000000000000000000000000000000","d6b39eb631df8ee60e46a576231ccf1fcd204a5e","d6b39eb631df8ee60e46a576231ccf1fcd204a5e",1000]' 430 1a11d6d341000000000000000000000000000000000000000000000000000000000000004100000000000000000000000000000000000000000000000000000000000000000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e00000000000000000000000000000000000000000000000000000000000003e8 431 ``` 432 ##### 4.3.16) unlockAdmin(bytes32,bytes32,address,address,uint256) 433 ``` 434 $ solar encode contracts/XC.sol unlockAdmin '["4100000000000000000000000000000000000000000000000000000000000000","4100000000000000000000000000000000000000000000000000000000000000","d6b39eb631df8ee60e46a576231ccf1fcd204a5e","d6b39eb631df8ee60e46a576231ccf1fcd204a5e",1000]' 435 85ea4fd741000000000000000000000000000000000000000000000000000000000000004100000000000000000000000000000000000000000000000000000000000000000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e00000000000000000000000000000000000000000000000000000000000003e8 436 ``` 437 ##### 4.3.17) withdrawal(address,uint256) 438 ``` 439 $ solar encode contracts/XC.sol withdrawal '["d6b39eb631df8ee60e46a576231ccf1fcd204a5e",1000]' 440 5a6b26ba000000000000000000000000d6b39eb631df8ee60e46a576231ccf1fcd204a5e00000000000000000000000000000000000000000000000000000000000003e8 441 ``` 442 443 #### 5)Testing The Smart Contracts. 444 445 ##### 5.1)prepare account 446 ``` 447 $ qcli getaccountaddress ma 448 $ qcli getaccountaddress sender 449 $ qcli listaccounts 450 451 { 452 "": 2360000.00000000, 453 "ma": 0.00000000, 454 "sender": 0.00000000 455 } 456 457 ``` 458 ##### 5.2)Contract 459 ``` 460 $ sh deploy.sh 461 ... ... 462 $ sh deploy_status.sh 463 464 ✅ contracts/XCPlugin.sol 465 txid: d70dd064f8144cf6df82018fcf812a009304eed69a0953f4f13cd9a5b560e32d 466 address: fdfe183ff6d196a2871d3b856629222f1dd1264b 467 confirmed: true 468 owner: qf2FFX6c5qohyqPvbUoyy8Xo4Q6QrjsaKX 469 470 471 ✅ contracts/INK.sol 472 txid: df3cda23e2b31f154bb31777b45ddbddff1eabbad636f9dea255528952261615 473 address: 223a30419a3dc234ec659e390d7bc65e70dcea0b 474 confirmed: true 475 owner: qP2RGcwGunqiZvSUidSQyEW64G1XuyGUyM 476 477 ✅ contracts/XC.sol 478 txid: 74a98da3dc957d90bce9040d66ab0175f65f913acb07df7f857d3a2e716e516f 479 address: 54acd8f45dad524584003ee4d4f4d4f8b00ef4c1 480 confirmed: true 481 owner: qMqd6usqYmUXpTB3FShUiKP59TfMrXFQJf 482 483 ``` 484 ##### 5.3)prepare Contract address 485 486 ``` 487 $ vim p_init.sh 488 $ sh p_read.sh 489 ``` 490 491 #### 6) examples 492 493 ##### 6.1)callcontract INK name 494 ``` 495 $ sh test/INK/call/name.sh 496 ``` 497 ##### 6.2)callcontract INK symbol 498 ``` 499 $ sh test/INK/call/symbol.sh 500 ``` 501 ##### 6.2)callcontract INK balanceOf(address) 502 ``` 503 $ sh test/INK/call/balanceOf.sh 504 ``` 505 ##### 6.3)sendtocontract INK transfer(address,uint) 506 ``` 507 $ sh test/INK/send/transfer.sh 508 ``` 509 ... ...