github.com/halybang/go-ethereum@v1.0.5-0.20180325041310-3b262bc1367c/loadScript/wancoin.js (about) 1 var wanBalance = function(addr){ 2 return web3.fromWin(web3.eth.getBalance(addr)); 3 } 4 5 var wanUnlock = function(addr){ 6 return personal.unlockAccount(addr,"wanglu",99999); 7 } 8 9 var sendWanFromUnlock = function (From, To , V){ 10 return eth.sendTransaction({from:From, to: To, value: web3.toWin(V)}); 11 } 12 13 var wait = function (conditionFunc) { 14 var loopLimit = 100; 15 var loopTimes = 0; 16 while (!conditionFunc()) { 17 admin.sleep(1); 18 loopTimes++; 19 if(loopTimes>=loopLimit){ 20 throw Error("wait timeout! conditionFunc:" + conditionFunc) 21 } 22 } 23 } 24 25 var tranValue = 10; 26 27 abiDef = [{"constant":false,"type":"function","stateMutability":"nonpayable","inputs":[{"name":"OtaAddr","type":"string"},{"name":"Value","type":"uint256"}],"name":"buyCoinNote","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,"inputs":[],"name":"getCoins","outputs":[{"name":"Value","type":"uint256"}]}]; 28 29 contractDef = eth.contract(abiDef); 30 coinContractAddr = "0x0000000000000000000000000000000000000064"; 31 coinContract = contractDef.at(coinContractAddr); 32 33 wanUnlock(eth.accounts[1]); 34 wanUnlock(eth.accounts[2]); 35 36 for (i = 0; i < 3; i++) { 37 var wanAddr = wan.getWanAddress(eth.accounts[2]); 38 var otaAddr = wan.generateOneTimeAddress(wanAddr); 39 40 txBuyData = coinContract.buyCoinNote.getData(otaAddr, web3.toWin(tranValue)); 41 buyCoinTx = eth.sendTransaction({from:eth.accounts[1], to:coinContractAddr, value:web3.toWin(tranValue), data:txBuyData, gas: 1000000, gasprice:'0x' + (20000000000).toString(16)}); 42 wait(function(){return eth.getTransaction(buyCoinTx).blockNumber != null;}); 43 } 44 45 var acc1OldBalance = parseFloat(wanBalance(eth.accounts[1])) 46 var acc2OldBalance = parseFloat(wanBalance(eth.accounts[2])) 47 48 49 var wanAddr = wan.getWanAddress(eth.accounts[2]); 50 var otaAddr = wan.generateOneTimeAddress(wanAddr); 51 52 txBuyData = coinContract.buyCoinNote.getData(otaAddr, web3.toWin(tranValue)); 53 buyCoinTx = eth.sendTransaction({from:eth.accounts[1], to:coinContractAddr, value:web3.toWin(tranValue), data:txBuyData, gas: 1000000, gasprice:'0x' + (20000000000).toString(16)}); 54 wait(function(){return eth.getTransaction(buyCoinTx).blockNumber != null;}); 55 56 57 var mixWanAddresses = wan.getOTAMixSet(otaAddr,2); 58 var mixSetWith0x = [] 59 for (i = 0; i < mixWanAddresses.length; i++){ 60 mixSetWith0x.push(mixWanAddresses[i]) 61 } 62 63 keyPairs = wan.computeOTAPPKeys(eth.accounts[2], otaAddr).split('+'); 64 privateKey = keyPairs[0]; 65 66 console.log("Balance of ", eth.accounts[2], " is ", web3.fromWin(eth.getBalance(eth.accounts[2]))); 67 var ringSignData = personal.genRingSignData(eth.accounts[2], privateKey, mixSetWith0x.join("+")) 68 var txRefundData = coinContract.refundCoin.getData(ringSignData, web3.toWin(tranValue)) 69 var refundTx = eth.sendTransaction({from:eth.accounts[2], to:coinContractAddr, value:0, data:txRefundData, gas: 2000000, gasprice:'0x' + (20000000000).toString(16)}); 70 wait(function(){return eth.getTransaction(refundTx).blockNumber != null;}); 71 72 console.log("New balance of ", eth.accounts[2], " is ", web3.fromWin(eth.getBalance(eth.accounts[2]))); 73 74 var acc1NewBalance = parseFloat(wanBalance(eth.accounts[1])) 75 var acc2NewBalance = parseFloat(wanBalance(eth.accounts[2])) 76 if (acc2NewBalance < acc2OldBalance || acc2NewBalance > (acc2OldBalance + tranValue)) { 77 throw Error("acc2OldBalance:" + acc2OldBalance + ", acc2NewBalance:" + acc2NewBalance + ", tranValue:" + tranValue) 78 } 79 80 if (acc1NewBalance > acc1OldBalance - tranValue || acc1NewBalance < acc1OldBalance - tranValue - 1) { 81 throw Error("acc1OldBalance:" + acc1OldBalance + ", acc1NewBalance:" + acc1NewBalance + ", tranValue:" + tranValue) 82 } 83 84