IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 智能合约开发遇到的坑 -> 正文阅读

[区块链]智能合约开发遇到的坑

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

使用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);
????};
????
});
  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2021-11-29 16:22:53  更:2021-11-29 16:22:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:42:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码