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