github.com/halybang/go-ethereum@v1.0.5-0.20180325041310-3b262bc1367c/loadScript/wantoken.js (about) 1 // before use the file, please desploy yourself contract and replace the contractAddr value with the new address!!! 2 3 var initPriBalance = 10000; 4 var priTranValue = 888; 5 6 var wanBalance = function(addr){ 7 return web3.fromWin(web3.eth.getBalance(addr)); 8 } 9 10 var wanUnlock = function(addr){ 11 return personal.unlockAccount(addr,"wanglu",99999); 12 } 13 14 var sendWanFromUnlock = function (From, To , V){ 15 eth.sendTransaction({from:From, to: To, value: web3.toWin(V)}); 16 } 17 18 var wait = function (conditionFunc) { 19 var loopLimit = 130; 20 var loopTimes = 0; 21 while (!conditionFunc()) { 22 admin.sleep(2); 23 loopTimes++; 24 if(loopTimes>=loopLimit){ 25 throw Error("wait timeout! conditionFunc:" + conditionFunc) 26 } 27 } 28 } 29 30 wanUnlock(eth.accounts[1]) 31 wanUnlock(eth.accounts[2]) 32 33 stampBalance = 0.09; 34 35 abiDefStamp = [{"constant":false,"type":"function","stateMutability":"nonpayable","inputs":[{"name":"OtaAddr","type":"string"},{"name":"Value","type":"uint256"}],"name":"buyStamp","outputs":[{"name":"OtaAddr","type":"string"},{"name":"Value","type":"uint256"}]},{"constant":false,"type":"function","inputs":[{"name":"RingSignedData","type":"string"},{"name":"Value","type":"uint256"}],"name":"refundCoin","outputs":[{"name":"RingSignedData","type":"string"},{"name":"Value","type":"uint256"}]},{"constant":false,"type":"function","stateMutability":"nonpayable","inputs":[],"name":"getCoins","outputs":[{"name":"Value","type":"uint256"}]}]; 36 37 contractDef = eth.contract(abiDefStamp); 38 stampContractAddr = "0x00000000000000000000000000000000000000c8"; 39 stampContract = contractDef.at(stampContractAddr); 40 41 for (i = 0; i < 3; i++) { 42 var wanAddr = wan.getWanAddress(eth.accounts[1]); 43 var otaAddrStamp = wan.generateOneTimeAddress(wanAddr); 44 txBuyData = stampContract.buyStamp.getData(otaAddrStamp, web3.toWin(stampBalance)); 45 46 47 sendTx = eth.sendTransaction({from:eth.accounts[1], to:stampContractAddr, value:web3.toWin(stampBalance), data:txBuyData, gas: 1000000}); 48 wait(function(){return eth.getTransaction(sendTx).blockNumber != null;}); 49 } 50 51 var wanAddr = wan.getWanAddress(eth.accounts[1]); 52 var otaAddrStamp = wan.generateOneTimeAddress(wanAddr); 53 txBuyData = stampContract.buyStamp.getData(otaAddrStamp, web3.toWin(stampBalance)); 54 55 56 sendTx = eth.sendTransaction({from:eth.accounts[1], to:stampContractAddr, value:web3.toWin(stampBalance), data:txBuyData, gas: 1000000}); 57 wait(function(){return eth.getTransaction(sendTx).blockNumber != null;}); 58 59 60 keyPairs = wan.computeOTAPPKeys(eth.accounts[1], otaAddrStamp).split('+'); 61 privateKeyStamp = keyPairs[0]; 62 63 var mixStampAddresses = wan.getOTAMixSet(otaAddrStamp,2); 64 var mixSetWith0x = [] 65 for (i = 0; i < mixStampAddresses.length; i++){ 66 mixSetWith0x.push(mixStampAddresses[i]) 67 } 68 69 70 71 var erc20simple_contract = web3.eth.contract([{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_toKey","type":"bytes"},{"name":"_value","type":"uint256"}],"name":"otatransfer","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"privacyBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[{"name":"initialBase","type":"address"},{"name":"baseKeyBytes","type":"bytes"},{"name":"value","type":"uint256"}],"name":"initPrivacyAsset","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"otabalanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"otaKey","outputs":[{"name":"","type":"bytes"}],"payable":false,"type":"function","stateMutability":"view"}]); 72 contractAddr = '0x18f940983efda661f29b8b18609daf28d0cd5bff'; 73 erc20simple = erc20simple_contract.at(contractAddr) 74 75 var wanAddr = wan.getWanAddress(eth.accounts[1]); 76 var otaAddrTokenHolder = wan.generateOneTimeAddress(wanAddr); 77 keyPairs = wan.computeOTAPPKeys(eth.accounts[1], otaAddrTokenHolder).split('+'); 78 privateKeyTokenHolder = keyPairs[0]; 79 addrTokenHolder = keyPairs[2]; 80 sendTx = erc20simple.initPrivacyAsset.sendTransaction(addrTokenHolder, otaAddrTokenHolder, '0x' + initPriBalance.toString(16), {from:eth.accounts[1], gas:1000000}); 81 wait(function(){return eth.getTransaction(sendTx).blockNumber != null;}); 82 83 ota1Balance = erc20simple.privacyBalance(addrTokenHolder) 84 if (ota1Balance != initPriBalance) { 85 throw Error('ota1 balance wrong! balance:' + ota1Balance + ', except:' + initPriBalance) 86 } 87 88 89 var hashMsg = addrTokenHolder 90 var ringSignData = personal.genRingSignData(hashMsg, privateKeyStamp, mixSetWith0x.join("+")) 91 92 var wanAddr = wan.getWanAddress(eth.accounts[2]); 93 var otaAddr4Account2 = wan.generateOneTimeAddress(wanAddr); 94 keyPairs = wan.computeOTAPPKeys(eth.accounts[2], otaAddr4Account2).split('+'); 95 privateKeyOtaAcc2 = keyPairs[0]; 96 addrOTAAcc2 = keyPairs[2]; 97 98 cxtInterfaceCallData = erc20simple.otatransfer.getData(addrOTAAcc2, otaAddr4Account2, priTranValue); 99 100 glueContractDef = eth.contract([{"constant":false,"type":"function","inputs":[{"name":"RingSignedData","type":"string"},{"name":"CxtCallParams","type":"bytes"}],"name":"combine","outputs":[{"name":"RingSignedData","type":"string"},{"name":"CxtCallParams","type":"bytes"}]}]); 101 glueContract = glueContractDef.at("0x0000000000000000000000000000000000000000") 102 combinedData = glueContract.combine.getData(ringSignData, cxtInterfaceCallData) 103 104 sendTx = personal.sendPrivacyCxtTransaction({from:addrTokenHolder, to:contractAddr, value:0, data: combinedData, gasprice:'0x' + (200000000000).toString(16)}, privateKeyTokenHolder) 105 wait(function(){return eth.getTransaction(sendTx).blockNumber != null;}); 106 107 108 ota2Balance = erc20simple.privacyBalance(addrOTAAcc2) 109 if (ota2Balance != priTranValue) { 110 throw Error("ota2 balance wrong. balance:" + ota2Balance + ", expect:" + priTranValue) 111 } 112 113 ota1Balance = erc20simple.privacyBalance(addrTokenHolder) 114 if (ota1Balance != initPriBalance - priTranValue) { 115 throw Error("ota2 balance wrong. balance:" + ota1Balance + ", expect:" + (initPriBalance - priTranValue)) 116 } 117 118