2019独角兽企业重金招聘Python工程师标准>>>

如需转载请注明出处https://my.oschina.net/feistel/blog/3007913

1.part6为在Remix上编译测试Solidity编写的智能合约
2.part7为在用geth搭建的私链上部署合约
3.其他部分介绍在ganache-cli模拟链上用truffle编译、部署、调用

----------------------------------------------------------------------------------------------------------------

1

图形界面版 本地测试链ganache-cli
https://truffleframework.com/ganache
用于模拟以太坊区块链生态,包括有旷工在挖矿,保证成功部署到测试链上,可以在该链上测试发布智能合约

(注意:ganache关闭后,节点服务的数据也会被清空)

----------------------------------------------------------------------------------------------------------------

2

pragma solidity >=0.4.21 <0.6.0;

contract Migrations {
  address public owner;
  uint public last_completed_migration;

constructor() public {
    owner = msg.sender;
  }

modifier restricted() {
    if (msg.sender == owner) _;
  }

function setCompleted(uint completed) public restricted {
    last_completed_migration = completed;
  }

function upgrade(address new_address) public restricted {
    Migrations upgraded = Migrations(new_address);
    upgraded.setCompleted(last_completed_migration);
  }
  
  function getOwner() view public returns (address) {
  return owner;
  }
}

----------------------------------------------------------------------------------------------------------------

3

//构建新项目
truffle init
创建part2的Solidity合约代码

//编译,自动编译contracts文件夹下sol文件
truffle compile (--all 强制重新编译所有文件) (--network name,指定使用的网络)

//配置truffle-config.js文件
修改:
development: {
    host: "127.0.0.1",     // Localhost (default: none)
    port: 7545,            // Standard Ethereum port (default: none)
    network_id: "*",       // Any network (default: none)
    }

//部署到区块链上,保证模拟的区块链客户端ganache在运行
//truffle会连接到上述区块链网络中,进行编译
truffle migrate (--reset 表示强制重新部署)

----------------------------------------------------------------------------------------------------------------

4

PS E:\@2019\truffle\test> truffle migrate
⚠️  Important ⚠️
If you're using an HDWalletProvider, it must be Web3 1.0 enabled or your migration will hang.

Starting migrations...
======================
> Network name:    'development'
> Network id:      5777
> Block gas limit: 6721975

1_initial_migration.js
======================

Deploying 'Migrations'
   ----------------------
   > transaction hash:    0xecf11deb00bf225021fda820ba1f73ba111d372cdcd8cb485fb1033bbc914e54
   > Blocks: 0            Seconds: 0
   > contract address:    0x77D4F14109d81Dc1d700F9C8A6E9475Fb783D4e9
   > account:             0xf0f6e21B63D0c9eF5A5C6f3E3c3272ABdBC5815E
   > balance:             99.99430184
   > gas used:            284908
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.00569816 ETH

> Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:          0.00569816 ETH

Summary
=======
> Total deployments:   1
> Final cost:          0.00569816 ETH

注:
gas used:284908
gas price:20 gwei
284908 * 20 = 5698160 gwei
5698160 / 1 000 000 000 = 0.005698160 eth
因此,total cost:0.005698160 eth

contract address,合约地址
account,合约账户

----------------------------------------------------------------------------------------------------------------

5

与智能合约交互

//进入Truffle控制台,需要在项目文件夹下
//可以使用命令与geth类似,web3
truffle console

//将合约实例赋给instance

let accounts = await web3.eth.getAccounts()
accounts
[ '0xf0f6e21B63D0c9eF5A5C6f3E3c3272ABdBC5815E',
  '0x21123d9E48693c7656B904B82e11e2Fa77D09F41',
  '0xd58bcc4Fbb5961FC7E96809B07c9e481981351D2',
  '0x225a3aa18c95e291A14fA25fee51dB6Ce87c1eb4',
  '0x40c8086a4AB47f547B452fF4C3651ab54F1d41Fb',
  '0x0Ce8832b9e9bD099CA0C5aC90cd0712e286B6C39',
  '0xBdF920b656ef5819C312F7575B26ebC035C30520',
  '0x697798292C73F3DfF1E9B9c9eE2A09dc0A4810b4',
  '0x5364d1566C10382E2880123989f006D9AAf4Fea5',
  '0xaCC3e08a27B56436bb4684B3d633d16f9e2456d2' ]

//创建合约实例,以{from: accounts[0]}设为调用者
let instance = await Migrations.deployed({from: accounts[0]})

//查看状态变量Owner
instance.getOwner()
'0xf0f6e21B63D0c9eF5A5C6f3E3c3272ABdBC5815E'

instance.setCompleted(1,{from: accounts[0]})
instance.upgrade(accounts[1],{from: accounts[0]})

----------------------------------------------------------------------------------------------------------------

6

使用在线工具,可以直接编译,点击函数进行调用,自动部署到测试链上,无需关心测试链,只需要专心测试智能合约代码
http://remix.ethereum.org/

----------------------------------------------------------------------------------------------------------------

7

在自己创建的以太坊本地区块链私链上(用geth创建的),发布智能合约

//启动以太坊节点
geth --identity "newEth" --rpc --rpccorsdomain "*" --datadir .\data\ --port 30303 --rpcapi "db,eth,net,web3" --networkid 10 console
--identity,自定义节点名
--rpc,启用HTTP-RPC服务器
--rpccorsdomain,允许跨域请求的域名列表(逗号分隔)(浏览器强制)
--rpcapi,基于HTTP-RPC接口提供的API
--networkid,网络标识符(整型, 1=Frontier, 2=Morden (弃用), 3=Ropsten, 4=Rinkeby) (默认: 1)
保持启动该节点的shell运行,下面操作在truffle项目另开shell窗口。
注:创建以太坊私链节点参考 以太坊又是啥? part7
https://my.oschina.net/feistel/blog/3007768

用truffle部署前先配置truffle-config.js文件,如part3所示
development: {
    host: "127.0.0.1",     // Localhost (default: none)
    port: 8545,            // Standard Ethereum port (default: none)
    network_id: "*",       // Any network (default: none)
    from: "0x5586fd7bb8b81992526bbf6bf707f0eba9ab3c7a",
    gas: 4712387
    }
注:1.需要指定部署合约的地址from,该地址是在私链节点上创建的,并且需要解锁
    2.需要指定gas

//接着
truffle compile
truffle migrate

即可部署到私链上。

//如果节点没有开始挖矿吗,在节点shell上,可以看到有一个待确认交易在交易池中
txpool.status
{
  pending: 1,
  queued: 0
}

//让节点开始挖矿
miner.start(1)

要调用合约,回到part5

其中在truffle看到如下:
⚠️  Important ⚠️
If you're using an HDWalletProvider, it must be Web3 1.0 enabled or your migration will hang.

Starting migrations...
======================
> Network name:    'development'
> Network id:      10
> Block gas limit: 4712388

1_initial_migration.js
======================

Deploying 'Migrations'
   ----------------------
   > transaction hash:    0x097f821a5cf84410a0c16d4987f86df061b154413e05d3efb0d5b55a3ea35732
   > Blocks: 0            Seconds: 0
   > contract address:    0xA920f6F9Aa3993e8cf11f70D3e3c581671B173e6
   > account:             0x5586fd7bb8b81992526BbF6bf707F0eba9ab3C7a
   > balance:             114.99242616
   > gas used:            321992
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.00643984 ETH

> Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:          0.00643984 ETH

Summary
=======
> Total deployments:   1
> Final cost:          0.00643984 ETH

如需转载请注明出处https://my.oschina.net/feistel/blog/3007913

转载于:https://my.oschina.net/feistel/blog/3007913

在以太坊模拟链及私链上编译、部署智能合约相关推荐

  1. 以太坊教程:搭建环境、编写编译一个智能合约

    本以太坊教程主要是介绍:搭建一个开发环境.编写编译一个智能合约. 以太坊是什么 以太坊(Ethereum)是一个开源的有智能合约功能的公共区块链平台.通过其专用加密货币以太币(Ether)提供去中心化 ...

  2. 以太坊源码linux下如何编译,以太坊教程:搭建环境、编写编译一个智能合约

    本以太坊教程主要是介绍:搭建一个开发环境.编写编译一个智能合约. 以太坊是什么 以太坊(Ethereum)是一个开源的有智能合约功能的公共区块链平台.通过其专用加密货币以太币(Ether)提供去中心化 ...

  3. 以太坊系列之十一: 零起步使用remix开发智能合约

    一步一步使用remix开发智能合约 最新版的remix(2017-8-3)只能使用在线开发了,已经没有离线版本了,并且好像在线版本要FQ才能访问(自行解决). 1.打开remix 注意地址如果是htt ...

  4. 什么是公链,私链,联盟链?

    昨天和大家详细的解说了一下Dapp,对Dapp不太了解的小伙伴可以先去了解一下之前写过的文章:(https://www.dappso.cn/2579.html) 然后再来看本章节.本章节主要和大家探讨 ...

  5. 代币转账_手把手教你从源代码开始搭建多节点以太坊私链(五)部署智能合约及代币发行...

    一.安装以太坊合约编译环境 安装solc 智能合约代码的编译可以通过第三方平台或者软件.不过,为了安全起见,还是搭建自己的编译器比较好.(But be aware that if the compil ...

  6. 以太坊(Ethereum) - Ganache本地区块链

    章节 以太坊(Ethereum) – 是什么 以太坊(Ethereum) – 什么是智能合约 以太坊(Ethereum) – 以太币 以太坊(Ethereum) – 虚拟机(E.V.M.) 以太坊(E ...

  7. 区块链学习(3) 以太坊测试环境编译并部署智能合约(mac版)

    选择编写智能合约的语言 Ethereum上的智能合约需要使用solidity语言来撰写.虽然还有其他能用来撰写智能合约的语言如Serpent(类Python).lll(类Fortran),但目前看到所 ...

  8. 使用 Web3.js 连接以太坊节点并查询区块链数据

    Web3.js 是一个用于连接以太坊网络的 JavaScript 库.在本文中,我们将介绍如何使用 Web3.js 来连接以太坊节点,并且查询以太坊区块链上的数据. 1. 安装 Web3.js 首先, ...

  9. 从2018年以太坊统计数据看区块链发展趋势

    今年6月,我们发布了"以太坊网络状态",重点介绍了整个网络的一些关键数据和统计数据.六个月后,即将在2018年结束时,我们处于长期"加密货币冬天"的尾声,201 ...

  10. 谁能成为真正的「以太坊Killer」?公链aelf准备从经济模型入手

    由于底层技术差异不大,许多公链在基础设施建设.性能标新.以及跨链互操作等方面的实力并没有太多距离.因此,如果想在公链赛道上胜出,成为真正的「以太坊Killer」,就需要「另辟蹊径」从经济模式上入手,继 ...

最新文章

  1. Linux常用命令--网终设置
  2. linux gcc 宏定义 __GNUC__ __GNUC_MINOR__ 版本区分
  3. mysql sql宽字节注入_sql注入之宽字节注入
  4. C语言goto关键字—尽量少用
  5. 代理proxy网络代理自动发现wpad代理自动配置pac三个概念解析
  6. 【clickhouse】clickhouse TCP 方式发送数据 ClickHouse-Native-JDBC
  7. lvuaagentinstbaseroot_桌面小助手UniAgent删除指南
  8. 8. Celery 4.3.0 Periodic Tasks 周期性任务调度
  9. Javascript:ES6-ES11(1)
  10. 机器学习入门 - Google的机器学习速成课程
  11. 博达工业云与阿里云对比
  12. 进阶 - Git的标签管理
  13. nginx php cgi.sock,nginx中unix:/tmp/php-cgi.sock错误解决解决
  14. jmp指令(0903)
  15. ERD ONline 为企业数字化转型助力
  16. 雷达、定位、跟踪等信号处理邻域SCI期刊整理及推荐
  17. 车道线检测识别 [园区道路线检测识别](开源github,欢迎stared)
  18. 上传图片时总是提示“非法图像文件”
  19. 绝地求生刺激战场亚服务器要维护多久,绝地求生刺激战场国际服回归礼包要多久不登录才有-绝地求生刺激战场国际服回归礼包详细介绍攻略_手心游戏...
  20. 元宇宙能成为下一个互联网吗?

热门文章

  1. redis连接数据库进行操作
  2. 学习笔记——模板方法模式
  3. BZOJ2425: [HAOI2010]计数
  4. ODBC操作excel
  5. [C++] socket - 4 [线程同步 简单例子]
  6. (转)c# Invoke和BeginInvoke区别
  7. xcode 此工作区的项目包含使用Swift 3.x开发的源代码。此版本的Xcode不支持生成或迁移Swift 3.x目标。使用Xcode 10.1将代码迁移到Swift 4。
  8. JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(三):两个Viewmodel搞定增删改查...
  9. Entity Framework Plus
  10. Brute Force(暴力算法)