使用truffle部署以太坊智能合约到区块链

hubwiz · · 1578 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

truffle是以太坊(ethereum)开发智能合约(smart contract)过程中最受欢迎的框架,本教程来安装构建一个基本的Truffle项目并部署一个智能合约到区块链。 开始本文之前希望你已经了解区块链、以太坊、智能合约等基本概念。 # 安装 Truffle 安装 Truffle 框架非常的简单,只需要一行命令: ``` npm install -g truffle ``` 当然前提是你已经安装好了NodeJS并且版本要在5.0以上。 Tunffle还要求一个运行的以太坊客户端,以便支持标准的JSON RPC API,有很多的选择比如Ganache、geth。 # 构建一个Truffle项目 要使用大量的Tunffle命令,我们通过使用一个现成的Tunffle项目来学习。第一步是创建一个Truffle项目。 我们可以创建一个空的项目模板,不过刚开始构建项目,我们可以使用[Tunffle Boxs](http://truffleframework.com/boxes),里面有很多的示例应用程序和项目模板。本文使用[MetaCoin box](http://truffleframework.com/boxes/metacoin),它创建一个可以在帐户之间传输代币的应用程序示例。 1.为构建Truffle项目创建新目录: ``` mkdir MetaCoin cd MetaCoin ``` 2.下载 MetaCoin box,使用`truffle unbox <box-name>`来下载各种示例,如果要建一个空的不包括智能合约的项目可以使用`truffle init`。 ``` truffle unbox metacoin ``` 上述命令完成后,我们获得一个有以下目录结构的项目: * contracts/: Solidity编写的智能合约目录。 * migrations/:脚本部署目录。 * test/:用来测试应用程序和智能合约的测试目录。 * truffle.js/:Truffle 配置文件。 # 浏览一下这个项目 1. 打开`contracts/MetaCoin.sol`,这是一个用Solidity编写的智能合约文件,这个智能合约建了Metacoin代币,我们可以注意到它引用了同目录下的另外一个solidity编写的文件`contracts/ConvertLib.sol`。 2. 打开`contracts/Migrations.sol`,这是一个单独的Solidity文件,用来管理和更新部署的智能合同的状态。这个文件每个Tunffle项目都有,通常不用管。 3. 打开`migrations/1_initial_deployment.js`文件,这个脚本是为了部署`Migrations.sol`文件中的`Migrations`合约。 4. 打开`migrations/2_deploy_contracts.js`文件,这个脚本是为了部署`MetaCoin`合约,会按顺序执行完上一步的脚本后执行。 5. 打开`test/TestMetacoin.sol`文件,这是一个Solidity编写的测试文件,确保你的合约正常工作。 6. 打开`test/metacoin.js`文件,这个脚本与上面的测试文件类似。 7. 打开`truffle.js`文件,用于设置网络信息和其他与项目相关的内容。文件是空白的,没关系,因为我们将使用一个内置有默认值的Truffle命令。 # 测试项目 1.打开终端,执行命令: ``` truffle test ./test/TestMetacoin.sol ``` 输出结果是这样的: ``` TestMetacoin √ testInitialBalanceUsingDeployedContract (71ms) √ testInitialBalanceWithNewMetaCoin (59ms) 2 passing (794ms) ``` 2.运行JavaScript测试: ``` truffle test ./test/metacoin.js ``` 输出结果是这样的: ``` Contract: MetaCoin √ should put 10000 MetaCoin in the first account √ should call a function that depends on a linked library (40ms) √ should send coin correctly (129ms) 3 passing (255ms) ``` # 编译智能合约 ``` truffle compile ``` 输出结果是这样的: ``` Compiling .\contracts\ConvertLib.sol... Compiling .\contracts\MetaCoin.sol... Compiling .\contracts\Migrations.sol... Writing artifacts to .\build\contracts ``` # 使用 Ganache 部署项目 当使用Tuffle开发一个多功能的私有链和控制台时也可以使用ganache,它作为一个桌面应用程序来启动私有链。对于以太坊和区块链新手来说ganache是一个更容易理解的工具,因为它会显示更多的信息给我们。 除了运行Ganache之外,需要额外编辑一下Tunffle配置文件,以指向ganache实例。 1.下载和安装 [Ganache](http://truffleframework.com/ganache) 2.打开 `truffle.js` ,用下面的内容替换: ``` module.exports = { networks: { development: { host: "127.0.0.1", port: 7545, network_id: "*" } } }; ``` 这样就可以使用Ganache的默认参数进行连接了。 3.保存一下这个文件。 4.启动 Ganache ![truffle-quickstart](http://blog.hubwiz.com/2018/06/15/truffle-quickstart/accounts.png) 5.打开终端,用Ganache部署智能合约到区块链 ``` truffle migrate ``` 输出结果是这样的: ``` Using network 'development'. Running migration: 1_initial_migration.js Replacing Migrations... ... 0x63b393bd50251ec5aa3e159070609ee7c61da55531ff5dea5b869e762263cb90 Migrations: 0xd6d1ea53b3a7dae2424a0525d6b1754045a0df9f Saving successful migration to network... ... 0xe463b4cb6a3bbba06ab36ac4d7ce04e2a220abd186c8d2bde092c3d5b2217ed6 Saving artifacts... Running migration: 2_deploy_contracts.js Replacing ConvertLib... ... 0xa59221bc26a24f1a2ee7838c36abdf3231a2954b96d28dd7def7b98bbb8a7f35 ConvertLib: 0x33b217190208f7b8d2b14d7a30ec3de7bd722ac6 Replacing MetaCoin... ... 0x5d51f5dc05e5d926323d580559354ad39035f16db268b91b6db5c7baddef5de5 MetaCoin: 0xcd2c65cc0b498cb7a3835cfb1e283ccd25862086 Saving successful migration to network... ... 0xeca6515f3fb47a477df99c3389d3452a48dfe507980bfd29a3c57837d6ef55c5 Saving artifacts... ``` 内容显示的是交易id和你所部署的智能合约地址。 6.在Ganache中,点击`Transactions` 按钮可以看到被处理的交易。 7.要与合约进行交互,可以使用Truffle控制台。类似于Truffle Develop,唯一不同的是它连接到现有区块链(在这种情况下,由Ganache生成的) ``` truffle console ``` 你会看到下面的提示: ``` truffle(development)> ``` # 与智能合约交互 使用控制台通过下面的方式进行交互: * 查看账户余额 ``` MetaCoin.deployed().then(function(instance){return instance.getBalance(web3.eth.accounts[0]);}).then(function(value){return value.toNumber()}); ``` * 看看有多少以太合适(并注意合约定义1个metacoin价值2以太) ``` MetaCoin.deployed().then(function(instance){return instance.getBalanceInEth(web3.eth.accounts[0]);}).then(function(value){return value.toNumber()}); ``` * 从一个账号转账到另一个账号 ``` MetaCoin.deployed().then(function(instance){return instance.sendCoin(web3.eth.accounts[1], 500);}); ``` * 检查是否收到metacoin ``` MetaCoin.deployed().then(function(instance){return instance.getBalance(web3.eth.accounts[1]);}).then(function(value){return value.toNumber()}); ``` * 检查给别人转账的账户 ``` MetaCoin.deployed().then(function(instance){return instance.getBalance(web3.eth.accounts[0]);}).then(function(value){return value.toNumber()}); ``` ok,Truffle快速入门的教程就到这里,如果还有疑问可以访问我们的在线互动课程: > - [以太坊教程](http://xc.hubwiz.com/course/5a952991adb3847553d205d1?affid=studygolang615),主要介绍智能合约与dapp应用开发,适合入门。 > - [以太坊开发](http://xc.hubwiz.com/course/5abbb7acc02e6b6a59171dd6?affid=studygolang615),主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。 原文转载:《使用[truffle](http://blog.hubwiz.com/2018/06/15/truffle-quickstart/)部署以太坊智能合约到区块链》

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1578 次点击  
加入收藏 微博
2 回复  |  直到 2018-06-16 11:54:08
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传