合约示例

pragma solidity ^0.4.18;

contract CallMeChallenge {
bool public isComplete = false; function callme() public {
isComplete = true;
}
}

可以用solc编译合约,也可以用Remix编译。

如果用solc编译的话,需要下载同合约使用的solidity版本相同的solc版本。

npm install solc@0.4.18

Remix编译后直接复制bytecode到代码里即可。

web3.js部署合约

环境:nodejs

npm install web3@^0.20.1
npm install ethereumjs-tx@^1.3.7
var Web3 = require('web3');
var Tx = require('ethereumjs-tx');
var solc = require('solc');
var fs = require('fs'); //init
if (typeof web3 !== 'undefined') {
web3 = new Web3(web3.currentProvider);
} else {
web3 = new Web3(new Web3.providers.HttpProvider("https://ropsten.infura.io/v3/1b8...b0"));
} var fromAddr = '0x97...5B7';
var count = web3.eth.getTransactionCount(fromAddr);
var gasPrice = web3.eth.gasPrice;
var gasLimit = 3000000;
var privateKey = new Buffer.from('bb07...ed3c', 'hex'); //编译合约,获得bytecode
var source = fs.readFileSync("./test.sol", "utf8");
var compilied = solc.compile(source, 1);
var bytecode = compilied.contracts[':CallMeChallenge'].bytecode; //要打包的交易信息
var rawTx = {
'from': fromAddr,
'nonce': web3.toHex(count),
'gasPrice': web3.toHex(gasPrice),
'gasLimit': web3.toHex(gasLimit),
'value': '0x0',
'data': '0x'+bytecode
}; var tx = new Tx(rawTx);
tx.sign(privateKey);
var serializedTx = tx.serialize(); var hashTx = web3.eth.sendRawTransaction('0x'+serializedTx.toString('hex'));
console.log('txHash: ' + hashTx);
var makeTx;
while (true) {
makeTx = web3.eth.getTransaction(hashTx); if (makeTx["blockNumber"] !== null) {
var receipt = web3.eth.getTransactionReceipt(hashTx);
console.log("address: " + receipt["contractAddress"]);
break;
}
}

在运行同一个脚本的时候遇到玄学问题,Error: Invalid JSON RPC response: undefined报出这个错误,找了很久才发现是网络问题,加载infura有时候需要挂个代理来访问,如果你也遇到这个问题,就挂个代理跑跑。

web3.py部署合约

环境:python3.6

# -*- coding:utf-8 -*-

from web3 import Web3, HTTPProvider

true = True
false = False web3 = Web3(HTTPProvider('https://ropsten.infura.io/v3/1b...b0')) fromAddr = '0x97D7...5B7'
privateKey = '0xbb...ed3c'
nonce = web3.eth.getTransactionCount(fromAddr)
gasPrice = web3.eth.gasPrice
rawTx = {
'from': fromAddr,
'nonce': nonce,
'gasPrice': gasPrice,
'gas': 300000,
'value': web3.toWei(0, 'ether'),
'data': '0x606060405260008060006101000a81548160ff021916908315150217905550341561002957600080fd5b60e4806100376000396000f3006060604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063a3c8e39314604e578063b2fa1c9e146060575b600080fd5b3415605857600080fd5b605e608a565b005b3415606a57600080fd5b607060a6565b604051808215151515815260200191505060405180910390f35b60016000806101000a81548160ff021916908315150217905550565b6000809054906101000a900460ff16815600a165627a7a723058208fd18624eaaac9c24521a084590bb1b536e9a94f23086c49864b9c02300ff0c20029'
} def deploy(rawTx):
signedTx = web3.eth.account.signTransaction(rawTx, private_key=privateKey)
hashTx = web3.eth.sendRawTransaction(signedTx.rawTransaction).hex()
receipt = web3.eth.waitForTransactionReceipt(hashTx) return receipt if __name__ == '__main__':
receipt = deploy(rawTx)
print('address: ' + receipt['contractAddress'])

后话

这里用JavaScript和Python两个web3版本来实现自动部署合约,免去了在Remix上手动部署,另外还有Java版的web3等等。

如何用web3部署智能合约的更多相关文章

  1. web3部署智能合约碰到的一个奇怪问题

    都是gasLimit惹的祸 解决一个奇怪问题Error: Number can only safely store up to 53 bits 原来好好的node endpointtest.js ,结 ...

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

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

  3. Web3与智能合约交互实战

    写在前面 在最初学习以太坊的时候,很多人都是自己创建以太坊节点后,使用geth与之交互.这种使用命令行交互的方法虽然让很多程序员感到兴奋(黑客帝国的既视感?),但不可能指望普通用户通过命令行使用Dap ...

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

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

  5. 使用Truffle 部署智能合约

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

  6. Eth 部署智能合约

    首先要开发以太坊的智能合约,需要EVM(以太坊虚拟机),也就是需要运行的环境,我们可以通过 geth 来设置开发环境: geth --datadir testNet --dev console 2&g ...

  7. 使用web3部署一个比较复杂的智能合约

    以太坊系列之二十一 使用web3部署比较复杂的智能合约 搭建私链上的雷电网络 以太坊系列之二十一 使用web3部署比较复杂的智能合约 1 雷电网络智能合约简单介绍 2 remix 无法部署使用了lib ...

  8. day02 智能合约

    上午 1>部署智能合约网络 语法 require 2>利用第三方的节点 同步到以太坊 3>智能合约部署的步骤: 1.查看区块 2.发布合约 deploy后台经历的事情:就是部署合约的 ...

  9. 使用 Browser-solidity 在 Go-Ethereum1.7.2 上进行简单的智能合约部署

    目录 目录 1.基本概念 1.1.什么是智能合约? 1.2.什么是Solidity? 1.2.1.Solidity的语言特性 1.3.什么是 Browser-solidity? 2.Browser-s ...

随机推荐

  1. MyCat学习 ------分库分表 随笔

    垂直切分.水平切分 1.垂直分库,解决库中表太多的问题. 2.垂直分表,解决表中列太多的问题.例如 商品表 包含 产地.二维码 .时间.价格.各个列.分为不同的小表. 水平切分, 大数据表拆分为小表 ...

  2. luogu P2672 推销员 |贪心

    题目描述 阿明是一名推销员,他奉命到螺丝街推销他们公司的产品.螺丝街是一条死胡同,出口与入口是同一个,街道的一侧是围墙,另一侧是住户.螺丝街一共有N家住户,第ii家住户到入口的距离为Si米.由于同一栋 ...

  3. 在 Xcode9 中自定义文件头部注释和其他文本宏

    在 Xcode9 中自定义文件头部注释和其他文本宏 . 参考链接 注意生成的plist文件的名称为IDETemplateMacros.plist 在plist文件里设置自己想要的模板 注意plist存 ...

  4. cesium 结合 geoserver 实现地图属性查询(附源码下载)

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...

  5. HDU1561 The more ,The better (树形背包Dp)

    ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物.但由于地理位置原因,有些城堡不能直接攻克,要攻克这些城堡必须先 ...

  6. HDU4109-instruction agreement(差分约束-最长路+建立源点,汇点)

    Ali has taken the Computer Organization and Architecture course this term. He learned that there may ...

  7. 玩转摄像头之 基于SDRAM缓冲 USB2.0视频采集系统 MT9T001、MT9P031 演示 展示

    玩转摄像头之  基于SDRAM缓冲 USB视频采集系统  MT9T001.MT9P031 最新设计的系统: 核心板(FPGA+SDRAM)+底板(68013+DVP)+sensor 先看图 核心板 正 ...

  8. Everspin非易失性MRAM切换技术

    切换MRAM技术 切换MRAM使用1个晶体管,1个MTJ单元来提供简单的高密度存储器.Everspin使用获得专利的Toggle电池设计,可提供高可靠性.数据在温度下20年始终是非易失性的. 在读取期 ...

  9. 一篇文章看清楚JDK13的特性!

    1.switch优化更新 JDK11以及之前的版本: switch (day) { case MONDAY: case FRIDAY: case SUNDAY: System.out.println( ...

  10. 多个datasource的配置与实现原理

          一般情况下,一个项目中只会有一个datasource,但是在某些情况.或者业务需求的情况下会出现一个项目有多个datasource的情况,当满足一定条件的时候,对数据库的操作就会从一个一个 ...