//导入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/await
let 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();

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

  1. 使用Truffle 部署智能合约

    使用Truffle 部署智能合约 之前我们使用Geth,原生的以太坊Golang工具,分析了创世区块的参数内容,在本地创建了私有以太坊区块链,并使用两个账户进行了挖矿和转账操作,对以太坊有了基本了解. ...

  2. 以太坊系列之十七: 使用web3进行合约部署调用以及监听

    以太坊系列之十七: 使用web3进行智能合约的部署调用以及监听事件(Event) 上一篇介绍了使用golang进行智能合约的部署以及调用,但是使用go语言最大的一个问题是没法持续监听事件的发生. 比如 ...

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

    参考:https://www.jianshu.com/p/7e541cd67be2 部署智能合约的方法有很多,比如使用truffle框架,使用remix-ide等,在这里的部署方法是使用nodejs一 ...

  4. 如何用web3部署智能合约

    合约示例 pragma solidity ^0.4.18; contract CallMeChallenge { bool public isComplete = false; function ca ...

  5. EOS测试链智能合约部署调用

    ETH与EOS两者智能合约进行简单的对比. 1.编译智能合约(合约编译成.wasm与.abi格式后即可部署到区块链) [root@C03-12U-26 testcontract]# cat testc ...

  6. Solidity truffle,部署合约到Ropsten测试链或主链,调用合约(转)

    Solidity truffle,部署合约到Ropsten测试链或主链,调用合约 转 https://blog.csdn.net/houyanhua1/article/details/89010896 ...

  7. 在testrpc以太坊测试环境部署智能合约

    2018年03月13日 09:20:54 思无邪-machengyu 阅读数 2683   版权声明:本文为博主原创文章,转载请务必注明出处,否则追究法律责任 https://blog.csdn.ne ...

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

    标题很大,想说的很多,不知道从那开始~~直接步入正题吧 个人也是由于公司的人员的现状和项目的特殊情况,今年年中后开始折腾web自动化这块:整这个原因很简单,就是想能让自己偷点懒.也让减轻一点同事的苦力 ...

  9. 随手写的自动批量编译部署NativeAndroid程序Python脚本

    背景 有一堆工程NativeAndroid程序,要一一编译部署编译测试,手头只有AndroidManifest和Makefile,需要一个个Update,Ndk-build,和发包安装测试,很是头疼, ...

随机推荐

  1. linux route路由

    网关(Gateway)又称网间连接器.协议转换器.网关在网络层以上实现网络互连 就好像一个房间可以有多扇门一样,一台主机可以有多个网关.默认网关的意思是一台主机如果找不到可用的网关,就把数据包发给默认 ...

  2. Android源码分析(七)-----如何解决java编译版本问题

    一 : 问题描述 Your version is: java version "1.6.0_31" Java(TM) SE Runtime Environment (build 1 ...

  3. Busness Client 客户端配置

    1,打开Busness Client,点击新建按钮: 2,选择New System Connection(SAP Logon),这个是配置GUI登陆的,就相当于用BC登陆GUI. 这里就和GUI的配置 ...

  4. C# 获取指定类型的文件

    C# 获取指定类型的文件 public static List<FileInfo> getFile(string path, string extName) { List<FileI ...

  5. 【爬虫】使用selenium设置cookie

    https://segmentfault.com/a/1190000015826749

  6. 【转】学习ARM为什么首选IMAX6??

    ARM作为目前嵌入式行业主流的架构,已经让越来越多从事电子行业的朋友了解,并且高校对于嵌入式的学习,很多直接从ARM开始,目前ARM的嵌入式培训也越来越多,足以说明现在嵌入式行业有多火.目前主流的AR ...

  7. Centos7下的日志切割--转发

    logrotate /etc/logrotate.conf 是 Logrotate 工具的一个配置文件,这个工具用来自动切割系统日志,Logrotate 是基于 cron 来运行的,如下: [root ...

  8. 【解决】Error: ENOSPC: no space left on device, watch

    发现问题: 启动 node 项目ReactNative时候出现报错Error: ENOSPC: no space left on device, watch [root@iz2zeihk6kfcls5 ...

  9. JFrog杰蛙DevOps平台

    https://www.jfrog.com/confluence/display/XRAY/Welcome+to+JFrog+Xray

  10. Beyond Compare设置自定义过滤

    Beyond Compare是一款优秀的专业级文件比较软件,利用它可以快速比较出文件之间的差异,以便于修改.整合.其中较强大的功能之一就是文件夹比较,面对海量的子文件夹以及文件,Beyond Comp ...