合约示例

  1. pragma solidity ^0.4.18;
  2. contract CallMeChallenge {
  3. bool public isComplete = false;
  4. function callme() public {
  5. isComplete = true;
  6. }
  7. }

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

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

  1. npm install solc@0.4.18

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

web3.js部署合约

环境:nodejs

  1. npm install web3@^0.20.1
  2. npm install ethereumjs-tx@^1.3.7
  1. var Web3 = require('web3');
  2. var Tx = require('ethereumjs-tx');
  3. var solc = require('solc');
  4. var fs = require('fs');
  5. //init
  6. if (typeof web3 !== 'undefined') {
  7. web3 = new Web3(web3.currentProvider);
  8. } else {
  9. web3 = new Web3(new Web3.providers.HttpProvider("https://ropsten.infura.io/v3/1b8...b0"));
  10. }
  11. var fromAddr = '0x97...5B7';
  12. var count = web3.eth.getTransactionCount(fromAddr);
  13. var gasPrice = web3.eth.gasPrice;
  14. var gasLimit = 3000000;
  15. var privateKey = new Buffer.from('bb07...ed3c', 'hex');
  16. //编译合约,获得bytecode
  17. var source = fs.readFileSync("./test.sol", "utf8");
  18. var compilied = solc.compile(source, 1);
  19. var bytecode = compilied.contracts[':CallMeChallenge'].bytecode;
  20. //要打包的交易信息
  21. var rawTx = {
  22. 'from': fromAddr,
  23. 'nonce': web3.toHex(count),
  24. 'gasPrice': web3.toHex(gasPrice),
  25. 'gasLimit': web3.toHex(gasLimit),
  26. 'value': '0x0',
  27. 'data': '0x'+bytecode
  28. };
  29. var tx = new Tx(rawTx);
  30. tx.sign(privateKey);
  31. var serializedTx = tx.serialize();
  32. var hashTx = web3.eth.sendRawTransaction('0x'+serializedTx.toString('hex'));
  33. console.log('txHash: ' + hashTx);
  34. var makeTx;
  35. while (true) {
  36. makeTx = web3.eth.getTransaction(hashTx);
  37. if (makeTx["blockNumber"] !== null) {
  38. var receipt = web3.eth.getTransactionReceipt(hashTx);
  39. console.log("address: " + receipt["contractAddress"]);
  40. break;
  41. }
  42. }

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

web3.py部署合约

环境:python3.6

  1. # -*- coding:utf-8 -*-
  2. from web3 import Web3, HTTPProvider
  3. true = True
  4. false = False
  5. web3 = Web3(HTTPProvider('https://ropsten.infura.io/v3/1b...b0'))
  6. fromAddr = '0x97D7...5B7'
  7. privateKey = '0xbb...ed3c'
  8. nonce = web3.eth.getTransactionCount(fromAddr)
  9. gasPrice = web3.eth.gasPrice
  10. rawTx = {
  11. 'from': fromAddr,
  12. 'nonce': nonce,
  13. 'gasPrice': gasPrice,
  14. 'gas': 300000,
  15. 'value': web3.toWei(0, 'ether'),
  16. 'data': '0x606060405260008060006101000a81548160ff021916908315150217905550341561002957600080fd5b60e4806100376000396000f3006060604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063a3c8e39314604e578063b2fa1c9e146060575b600080fd5b3415605857600080fd5b605e608a565b005b3415606a57600080fd5b607060a6565b604051808215151515815260200191505060405180910390f35b60016000806101000a81548160ff021916908315150217905550565b6000809054906101000a900460ff16815600a165627a7a723058208fd18624eaaac9c24521a084590bb1b536e9a94f23086c49864b9c02300ff0c20029'
  17. }
  18. def deploy(rawTx):
  19. signedTx = web3.eth.account.signTransaction(rawTx, private_key=privateKey)
  20. hashTx = web3.eth.sendRawTransaction(signedTx.rawTransaction).hex()
  21. receipt = web3.eth.waitForTransactionReceipt(hashTx)
  22. return receipt
  23. if __name__ == '__main__':
  24. receipt = deploy(rawTx)
  25. 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. Swoole高效跟传统的web开发有什么区别?

    一.swoole的运行模式 Swoole高效跟传统的web开发有什么区别,除了传统的LAMP/LNMP同步开发模式,swoole的异步开发模式是怎么样的. 1.1.传统web开发模式 PHP web开 ...

  2. 记一次Elasticsearch OOM的优化过程——基于segments force merge 和 store type 转为 niofs

    首选,说明笔者的机器环境(不结合环境谈解决方案都是耍流氓): cpu 32核,内存128G,非固态硬盘: RAID0 (4T * 6),单节点,数据量在700G到1800G,索引15亿~21亿.敖丙大 ...

  3. 【Leetcode 做题学算法周刊】第六期

    首发于微信公众号<前端成长记>,写于 2019.12.15 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 11 ...

  4. Linux-tac、diff、tree、echo、seq、重定向

    1.tac  方向输出文件,最后一行放在第一行的位置输出 2.diff  比较文件的内容 vimdiff:在vim中比较 3. tree  树状图显示目录内容 -d 只显示目录   -L  树状 目录 ...

  5. oracle 日常巡检

    1. 检查数据库基本状况 包含:检查Oracle实例状态,检查Oracle服务进程,检查Oracle监听进程,共三个部分. 1.1. 检查Oracle实例状态 select instance_name ...

  6. Ambari 自定义服务集成原理介绍

    之前,在 github 上开源了 ambari-Kylin 项目,可离线部署,支持 hdp 2.6+ 及 hdp 3.0+ .github 地址为:https://github.com/8418090 ...

  7. Redis 的常用命令

    Redis 的数据类型 一些命令需要结合 redis 的数据类型来说. Redis 4.0 之前有5种数据类型,分别是:字符串(string).散列(hash).列表(list).集合(set).有序 ...

  8. 微信公众号:Mysticbinary

    愿你有绝对自由.每周会写一篇哲学类文章.

  9. Qt在Android平台上实现html转PDF的功能

    Qt for Android Qt for Android enables you to run Qt 5 applications Android devices. All Qt modules ( ...

  10. Linux CentOS 7 搭建 Tomcat 8 服务器

    Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.对于一个初学者来说,可以这样 ...