智能合约开发遇到的坑

智能合约开发遇到的坑,第1张

网上搜索的资料写的很详细啊,可试验啊试验,始终不成功,

使用Web3.js查询以太币和代币余额以及转账 https://www.jianshu.com/p/496c9d833df9 不用自己同步以太坊节点,直接发起签名交易 https://segmentfault.com/a/1190000014729677 以太坊ERC20 Token标准完整说明 https://blog.csdn.net/diandianxiyu_geek/article/details/78082551?utm_source=gold_browser_extension 最后发现,问题所在是因为网上的资料大部分都是针对私链的,而公链的转账是不一样的。。。啊。。。花费了两天的时间才试验出来       var myContract = new web3.eth.Contract(apiInterface, contractAddress);       // console.log(myContract.methods)      //合约查询账户余额      myContract.methods.balanceOf(currentAccount).call().then(data => {         console.log('from balance:' + data)      }) //合约转账   var txData = {            to: contractAddress,            value: web3.utils.toWei('0','ether'),//合约转账时,此值需设为0            gas: this.chainGas,            gasPrice: this.gasPrice,            nonce: nonce,            chainId: this.chainID,            data: myContract.methods.transfer(toAddress, 10000).encodeABI(),          }         web3.eth.accounts.signTransaction(txData, this.curAccount.decryptKey.privateKey)          .then((data)=>{           web3.eth.sendSignedTransaction(data.rawTransaction)             .on('transactionHash', (data)=>{               console.log('ok')             })             .catch((data)=>{               console.log(data)             })                 }) 最后附上大神的私链代码供参考: router.post('/transfer/token/sign.json', function (req, res) {     const from    = req.body.from;     const to      = req.body.to;          const symbol  = req.body.symbol;     const key     = req.body.key;     var message = {};     try{        const abi = fs.readFileSync( __dirname + '/abi/'+symbol+'.abi', 'utf-8');        const contractAddress = contracts[symbol];        const contract = new web3.eth.Contract(JSON.parse(abi), contractAddress, { "from": from});       contract.methods.balanceOf(from).call().then(function(balance){           contract.methods.decimals().call().then(function(decimals){               const amount = new BigNumber(req.body.amount).toFixed(Number(decimals)).toString().replace(".","");               if(Number(amount) > Number(balance)){                  message = {"status": false, "code":1, "data":{"error":"balance = " + balance}};                  logger.error(message);                  res.json(message);                  return;               }                         web3.eth.getGasPrice().then(function(gasPrice){                  var price = Number(gasPrice);                 web3.eth.getTransactionCount(from).then(function(nonce){                     contract.methods.transfer(from, amount).estimateGas().then(function(gas){                         var rawTransaction = {                            "nonce": web3.utils.toHex(nonce),                            "from": from,                            "to": contractAddress,                            "gas": web3.utils.toHex(gas),                            "gasPrice": web3.utils.toHex(price),                            // "gasLimit": this.web3.utils.toHex(gasLimit.gasLimit),                            "value": "0x0",                            "data": contract.methods.transfer(to, amount).encodeABI()                         };                         // console.log(`balance: ${balance}`);                         // console.log(price);                         // console.log(gas);                         // console.log(amount);                         // console.log(rawTransaction);                        logger.debug(`/transfer/token/sign.json - gas: ${gas}, price: ${price}, cost: ${gas * price}, balance: ${balance}, amount: ${amount}, value: ${value}`);                         // console.log(rawTransaction);                                                  var privateKey = new Buffer.from(key, 'hex');                         var tx = new Tx(rawTransaction);                         tx.sign(privateKey);                         var serializedTx = tx.serialize();                                   web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex')).on('receipt', function(txhash){                            message = {"status":true, "code":0, "data":{"txhash":txhash}};                            logger.info(message);                            res.json(message);                          });                       });                  });               });            });        });     }catch(error){        message = {"status": false, "code":1, "data":{"error":error.message}};        logger.error(message);        res.json(message);     };      });

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/722230.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-04-26
下一篇2022-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存