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