//导入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. Cheat Engine 指针

    打开游戏 扫描时间的流程就不多说了 扫描结果 寻找基地址 右击扫描到的地址,选择什么改写了这个地址 会弹出如下窗口 不用管这个窗口,去改变一下游戏时间,出现如下图 随便打开一个,找到了数据块地址和偏移 ...

  2. UIDatePicker基本使用

    UIDatePicker提供了一个快速选择日期和时间的控件,他是UIControl的子类,专门用于日期时间的选择.其样式可以通过UIDatePicker的属性进行灵活设置,同时也可以获取到当前UIDa ...

  3. APP开发基础知识(转载)

    来源:https://www.cnblogs.com/wangsea/p/9413672.html 本文针对小白用户对App做一个简单的介绍,首先要了解App都有哪些类型,不同的类型适用于哪些需求,用 ...

  4. Echarts实现Excel趋势线和R平方计算思路

    测试数据 [19550, 7.1 ],[22498, 8.44 ],[25675, 9.56 ],[27701, 10.77],[29747, 11.5 ],[32800, 12.27],[34822 ...

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

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

  6. prometheus学习系列十一: Prometheus pushgateway的使用

    由于网络问题或者安全问题,可能我们的数据无法直接暴露出一个entrypoint 给prometheus采集. 这个时候可能就需要一个pushgateway来作为中间者完成中转工作.  promethe ...

  7. flask通过nginx代理后base_url拿不到正确的url_scheme2016-04-14 12:31

    http://www.axiaoxin.com/article/210/ Nginx配置了https请求后,用户发起https请求时首先和Nginx建立连接,完成SSL握手,而后Nginx作为代理是以 ...

  8. 201671030118 索郎卓玛 实验十四 团队项目评审&课程学习总结

    项目 内容 作业课程地址 任课教师首页链接 作业要求 团队项目评审&课程学习总结 课程学习目标 项目的验收以及课程的学习进行总结与反思 一 对<实验一 软件工程准备>的任务提出的问 ...

  9. UI系统的表示与维护

    UI系统的表示与维护: 渲染单元的组织.维护.交互.解释.渲染. UI系统在应用层连接着视图的表示,在系统层连接着视图的绘制. 一.UI的结构 树形结构 二.UI的描述: 1.UI系统或UIkit或U ...

  10. OpenCV 学习笔记(0)两幅图像标定配准

    参考教程 依赖opencv扩展库,使用sifi匹配 保存配准信息 "./config/calibratedPara.yaml" #include <iostream> ...