web3 编译部署调用合约

//导入solc 编译器
let solc = require(‘solc‘)
let fs = require(‘fs‘)
//读取合约
let sourceCode = fs.readFileSync(‘./contracts/SimpleStorage.sol‘,‘utf-8‘)

//var input = ‘contract x { function g() {} }‘
// Setting 1 as second paramateractivates the optimiser
//编译合约
let output = solc.compile(sourceCode, 1)
module.exports = output[‘contracts‘][‘:SimpleStorage‘]

部署合约

let {bytecode, interface} = require(‘./01-complie‘)
//console.log(bytecode)
//console.log(interface) 

// 1.引入web3
let Web3 = require(‘web3‘)
// 2.new 一个web3实例
let web3 = new Web3()
// 3.设置网络
let isConnect = web3.setProvider(‘http://localhost:7545‘)

const account = ‘0x975938478Fa7359567b84E9c9ccc20b2aac23066‘

//console.log(isConnect)
//console.log("version:", web3.version)
//console.log(web3.eth.currentProvider)

// 1. 拼接合约数据 interface
let contract = new web3.eth.Contract(JSON.parse(interface))
// 2. 拼接bytecode
contract.deploy({
    data: bytecode,//合约bytecode
    arguments: [‘HelloWorld‘] //给构造函数传递参数,使用数组
}).send({
    from: account,
    gas: ‘3000000‘,
    //gasPrice: ‘1‘,
}).then(instance =>{
    console.log(‘address :‘,instance.options.address)
});
// 3. 合约部署

获取合约实例

//获取 合约实例,导出合约实例
let {bytecode, interface} = require(‘./01-complie‘)

// 1.引入web3
let Web3 = require(‘web3‘)
// 2.new 一个web3实例
let web3 = new Web3()
// 3.设置网络
let isConnect = web3.setProvider(‘http://localhost:7545‘)
// 合约的abi
let abi = [{"constant":false,"inputs":[{"name":"message","type":"string"}],"name":"setMessage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getMessage","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"str","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]
//合约地址
let address = ‘0x7f61E1A3970777C3C25DA410fD6E2c3CfCFB953a‘;
//此处abi 已经是json对象了不需要进行parse动作
let contractInstance = new web3.eth.Contract(abi,address);

//console.log(‘address‘,contractInstance.options.address);
module.exports = contractInstance;

调用合约

//1 .导入合约实例let instance = require(‘./03-instance‘);const from = ‘0x4E4c6a3655A5863089f9341ff61D3d8BeE00384a‘;

//异步调用,返回值是一个promise//2。读取数据/*instance.methods.getMessage().call().then(data => {    console.log(‘data: ‘, data);    //3.写入数据    instance.methods.setMessage(‘Hello JackLuo‘).send({        from: from,        value: 0    }).then(res => {        //4.读取数据        console.log(‘res :‘, res)        instance.methods.getMessage().call().then(data => {            console.log(‘data2: ‘, data);        })    })});*/

// web3与区块链交互的返回值都是promise,可以直接使用async/awaitlet test = async () => {    try {        let v1 = await instance.methods.getMessage().call()        console.log(‘v1:‘, v1)        let res = await instance.methods.setMessage(‘Hello Jackluo‘).send({            from: from,            value: 0        });        console.log(‘res:‘, res)        let v2 = await instance.methods.getMessage().call()        console.log(‘v2:‘, v2)    } catch (e) {        console.log(e)    }};

test();

原文地址:https://www.cnblogs.com/jackluo/p/12016536.html

时间: 2024-11-09 10:44:05

web3 编译部署调用合约的相关文章

nodejs部署智能合约的方法-web3 0.20版本

参考:https://www.jianshu.com/p/7e541cd67be2 部署智能合约的方法有很多,比如使用truffle框架,使用remix-ide等,在这里的部署方法是使用nodejs一步步编译部署实现的: const Web3 = require('web3'); const web3 = new Web3();//使用web3来进行区块链接口的调用 //通过rpc连接区块链,这里连接的是本地私有链 web3.setProvider(new Web3.providers.Http

win7下以太坊基于truffle+ganache开发环境搭建以及智能合约的部署调用

上一篇介绍的是以太坊下基于geth+remix-ide智能合约环境的搭建和部署运行,本篇介绍的是基于truffle+ganache. ganache相当于是geth的图形化操作界面,相对于纯指令操作的geth较为简单易上手,并且运行交易和生成区块的过程一目了然. [前期准备] 1.Node.js安装(这一点在上一篇文章中提到过,所以此处不做展示) 2.指令输入: npm install -g solc(安装智能合约) npm install -g ganache-cli (安装ganache开发

十分钟部署智能合约

eos环境搭建 1.git clone源代码 git clonehttps://github.com/EOSIO/eos --recursive 2.下载编译之后,里面有三个应用程序,这三个应用程序也都是命令行的: 1.Cleos: 2.Nodeos: 3.Keosd. 这三个应用程序之间有什么关系呢?我们现在使用的前端,怎么使用EOS呢? -Cleos,它是一个命令行程序.在前端使用EOS是通过Cleos输入命令,给EOS下达指令. -Nodeos,其实它就是挖矿客户端.在启动Nodeos之后

Web自动化框架之五一套完整demo的点点滴滴(excel功能案例参数化+业务功能分层设计+mysql数据存储封装+截图+日志+测试报告+对接缺陷管理系统+自动编译部署环境+自动验证false、error案例)

标题很大,想说的很多,不知道从那开始~~直接步入正题吧 个人也是由于公司的人员的现状和项目的特殊情况,今年年中后开始折腾web自动化这块:整这个原因很简单,就是想能让自己偷点懒.也让减轻一点同事的苦力活:对于自动化测试与人工测试优缺势的问题,这里不想深入讨论,开一个博客收集一些观点然后开个讨论组讨论效果可能会更好. 标题上列的,是自己对web自动化这块统一的一个想象或是一套完整的自动化应所包含的的部分,目前完成了excel功能案例参数化+业务功能分层设计+mysql数据存储封装+截图+日志+测试

maven 编译部署src/main/java下的资源文件

maven 编译部署src/main/java下的资源文件 maven默认会把src/main/resources下的所有配置文件以及src/main/java下的所有java文件打包或发布到target\classes下面, 但是现实我们可能会在src/main/java下面也放置一些配置文件如hibernate配置文件或mybatis mapper配置文件等, 如果不做一些额外配置,那我们打包后的项目可能找不到这些必须的资源文件,因此在pom.xml中增加类似如下配置: <build> &

编译部署LAMP+xcache (php-fpm模式)

通过编译安装方式部署分离式LAMP+xcache (php-fpm模式) 要求: (1)采用源码编译部署分离式的LAMP,其中php基于php-fpm模式 (2)基于LAMP平台一个虚拟主机提供WordPress,另一个虚拟主机提供phpMyadmin (3)利用xcache来为php提供缓存加速页面的访问速度 (4)对其中一个站点缓分别做压力测试,并且比对缓存加速前和加速后的数据. 环境: 192.168.1.103------>提供httpd服务 192.168.1.104------>提

jenkins+gitlab自动化编译部署方案探索及服务端编译webpack实战

一. 背景 之前我们的开发流程为在本地进行webpack打包编译,然后svn提交源代码和编译后的代码.同时每次提交前也会从svn更新源代码和编译后的代码.这样做有几个缺点: 1. svn 更新和提交编译后的代码造成大量冲突文件 2. 由于我们使用非覆盖式发布的命名方式,在经过小组多人多次优化提交测试之后,在整理需要发布的文件列表时,很容易遗漏一些文件 3. 在涉及到多人开发同一功能时容易产生代码被覆盖.人工安排发布优先级.手动注释他人未上线代码等情况 4. svn的分支开发繁琐不友好,加重工作量

rabbitmq编译部署以及常见报错

(一)源码安装Erlang(1)下载erlang源码包wget http://www.erlang.org/download/otp_src_R13B04.tar.gz(2)解压缩erlang源码包tar -zxvf otp_src_R13B04.tar.gz(3)安装./configure??--prefix=/usr/local/erlang./make./make install如果抛出如下错误No curses library functions found请先安装?curses lib

CentOS6系统编译部署LAMP(Linux, Apache, MySQL, PHP)环境

我们一般常规的在Linux服务器中配置WEB系统会用到哪种WEB引擎呢?Apache还是比较常用的引擎之一.所以,我们在服务器中配置LAMP(Linux, Apache, MySQL, PHP)是我们常用的WEB环境.对于大部分同学来说,我们会选择采用WEB面板或者是一键包安装,但是一键包或者面板也是有一些缺陷的,比如有些软件我们并不需要安装. 或者说,对于我们深入学习Linux系统的用户来说,肯定是需要一步步编译安装,这样才知道其中的原理.在这篇文章中,我们将在CentOS6系统中(CentO