solc@0.6.3 web3@1.2.6 都是最新版本的,编译与部署示例

摘要:
solc@0.6.3web3@1.2.6均为最新版本。编译和部署示例提示:在线的都是旧的,缺少东方和西方,无法使用。这是确保可用性的最新版本。它被用作演示。首先,solidity文件:提示:如果您自己编写合同,建议在编译之前重新混合成功地编写测试。8web3。eth。合同9模块。exports=instance最后,上一步中的web3实例用于与合约交互:1letmyContractInstance=require2//之前不会覆盖注释,而且各种回调都很不舒服。3/接下来,它们被重写为与异步和等待同步。

solc@0.6.3 web3@1.2.6 都是最新版本的,编译与部署示例

tips :网上的都是旧的,缺东少西的,不能用,我这个是最新的,保可用性,用来做示范:

首先是 solidity 文件:
tips :这里如果自己写合约,建议remix先写好测试成功在自己编译。

 1 pragma solidity ^0.6.3;
 2 
 3 contract test{
 4 
 5     string _message;
 6 
 7     constructor(string memory src)public{
 8         _message = src;
 9     }
10 
11     function setMessage(string memory message) public {
12         _message = message;
13     }
14     function getMessage()public view returns(string memory){
15         return _message;
16     }
17 }

接下来是编译文件:

 1 var fs = require("fs");
 2 var solc = require('solc');
 3 
 4 var fs = require('fs');
 5 let src = fs.readFileSync("你的solidity文件路径",'utf-8')
 6 // console.log(src)
 7 var input = {
 8     language: 'Solidity',
 9     sources: {
10         //这个名字后面导出的有用到,别乱改
11         'test.sol': {
12             // content: 'contract C { function f() public { } }'
13             content: src
14         }
15     },
16     settings: {
17         outputSelection: {
18             '*': {
19                 '*': ['*']
20             }
21         }
22     }
23 };
24 
25 var output = JSON.parse(solc.compile(JSON.stringify(input)));
26 
27 
28 teamJson = {
29     'abi': {},
30     'bytecode': ''
31 };
32 
33 // output 为json对象,根据json结构保存对应的abi和bytecode
34 //这里的test 就是上面不让乱改的原因,上面改了,这里记得也要改
35 for (var contractName in output.contracts['test.sol']) {
36     teamJson.abi = output.contracts['test.sol'][contractName].abi;
37     teamJson.bytecode = output.contracts['test.sol'][contractName].evm.bytecode.object;
38 }
39 
40 // console.log(teamJson);
41 //这里的test 就是上面不让乱改的原因,上面改了,这里记得也要改
42 module.exports = {
43     abi : output.contracts['test.sol'][contractName].abi,
44     bytecode : output.contracts['test.sol'][contractName].evm.bytecode.object,
45 }

然后是部署文件:

 1 let Web3 = require("web3");
 2 
 3 let {abi, bytecode} = require('上一步编译文件路径')
 4 
 5 // console.log(abi, bytecode)
 6 
 7 
 8 let account = '你的账户'
 9 let web3 = new Web3()
10 //这里设置本地的gannche 服务商
11 web3.setProvider("HTTP://127.0.0.1:7545")
12 // console.log(web3.eth.currentProvider)
13 
14 let mycontract = new web3.eth.Contract(abi)
15 
16 mycontract.deploy({
17     data: bytecode,
18     //传给合约构造函数的参数,无则不写
19     arguments: ["hello world"]
20 }).send({
21     from: account,
22     gas: 1500000,
23     gasPrice: '1'
24 }).then(Instance => {
25     console.log("addr :", Instance.options.address) // instance with the new contract address
26 });

然后是导出web3实例:

1 let Web3 = require("web3");
2 web3 = new Web3()
3 let {abi, bytecode} = require('编译文件的路径') 
4 
5 web3.setProvider("HTTP://127.0.0.1:7545")
6 instance = new 
7 //这里的地址也可以后期在设置,在operation中设置。
8 web3.eth.Contract(abi,"0x117582De7203137591400bE34Ed14845291e6c26")
9 module.exports = instance

最后是利用上一步的web3 实例与合约进行交互:

 1 let myContractInstance = require('上一步导出实例文件的位置')
 2 //注释的是没有改写之前的,各种回调,看着不舒服,
 3 //下面用asyn 和await 改写成同步的了。
 4 // myContractInstance.methods.getMessage().call().then(res => {
 5 //     console.log(res)
 6 //     //                         setMessage
 7 //     myContractInstance.methods.setMessage("jiujue 3 mmp").send({
 8 //         from: "0x2d5730fFCCD08b5c6b5250E814Ac417EDa085ECe",
 9 //         value: 0,
10 //     }).then(res => {
11 //         console.log('res', res)
12 //
13 //     })
14 // }
15 let go = async () => {
16     try {
17         //这里call 可以设置from 也可以不设置,
18         //但是涉及到更改的操作必须设置from,例如设置一个值,且必须用send()方法。
19         let res1 = await myContractInstance.methods.getMessage().call()
20         console.log(res1)
21         let res2 = await myContractInstance.methods.setMessage(res1 + "L").send({
22             from: "0x2d5730fFCCD08b5c6b5250E814Ac417EDa085ECe",
23             value: 0,
24         })
25         console.log(res2)
26         let res3 = await myContractInstance.methods.getMessage().call()
27         console.log(res3)
28     } catch (e) {
29         console.log(e)
30     }
31 }

Done.

免责声明:文章转载自《solc@0.6.3 web3@1.2.6 都是最新版本的,编译与部署示例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MS SQL的ISQL命令详解使用异步I/O大大提高应用程序的性能下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

关于ArcMap中的地图文档单位

在ArcMap中地图文档的单位有度分秒、千米、米、十进制等很多种,但是ArcMap中的测量距离功能的实现必须建立在图层框架具有投影坐标系的情况下才能进行正确的计算,否则是不能进行的,IPolyline的Lenth属性获取的单位为十进制,需要转换成米。...

java中cookie存取值

Cookie保存值:CookieuserCookie=newCookie(“loginInfo”,loginInfo);userCookie.setMaxAge(30*24*60*60);//生存期为一个月30*24*60*60userCookie.setPath(“/”);response.addCookie(userCookie);Cookie值:Coo...

笔试题多线程

多线程是实现异步的主要方式之一,异步不等于多线程。NET有很多异步编程支持。例如,Begin***和End***方法在许多地方都可用,这是一种异步编程支持。它的一些内部程序是使用多线程的异步编程,而其他程序是使用硬件功能的异步编程。因为多线程访问不使用锁定机制,所以更新将丢失。...

Nohup后台运行程序

场景:我现在需要跑脚本批量处理一些数据,但是我又不想盯着控制台看这个脚本的输出结果,想把这些输出结果记录到一个日志文件里面方案:可以使用Linux的nohup命令,把进程挂起,后台执行用法:$nohupXXXXXX.sh˃˃/runtime/deletedata.log&运行结果(这个数字是进程号):˃˃[1]13120有时候可能会报一个提示:$no...

rz上传文件及出错解决方案

原始链接:https://blog.csdn.net/yjk13703623757/article/details/87083997单独使用rz命令时有两个问题:上载中断和文件更改。解决方案是使用rz be进行上传,并在弹出对话框中删除“UploadfilesasASCII”之前的复选框。如果使用不带参数的rz命令上传一个大文件,则在上传过程中通常会中断。很...

vue中获取客户端IP地址

ice||!ice.candidate||!...