[区块链笔记4] truffle部署合约到Ganache

网友投稿 305 2022-09-25

[区块链笔记4] truffle部署合约到Ganache

文章目录

​​前言(废话+杂记+感受)​​​​正文前的记录​​​​创建项目​​​​写一个简单的solidity​​​​部署配置文件​​​​truffle编译​​​​部署的最后一步​​​​与合约互动​​​​总结​​

前言(废话+杂记+感受)

前段时间征集大创,班里两个同学想和我组队,然后我就又拉上一位大佬组起了队。其实到现在也不太清楚大学阶段最后要深入研究那个方向,现在还在各种方向都摸索着,好害怕最后什么都知道一点,但是什么都不精。不太想专门写一篇日志,所以就借着这个周二的早上记录一下叭。言归正传。 用了4天看solidity,第3、4天看的加密僵尸,第6章需要用到javascript、jquery,然后就用了3天去看这个两个语法,顺带着看了看nodejs的相关基础(因为部署的时候需要用到truffle等东西,这些都是和nodejs有一点联系的,比如说truffle就是得用npm来install,但是下载npm最省事的方法就是通过安装node来安装了)。 然后花了1天时间来看truffle的部署,准确的说应该是废了1天,因为这一天啥都没弄明白,只是装好了各种环境而已。

正文前的记录

加密僵尸那个教程的truffle里好多部署,看的头都晕了。但是现在想想好像是这么回事:truffle部署合约,可以部署到各种以太坊网路(包括公链、私链、测试链等等,也不知道这么说准不准确)。 比如说truffle部署到testrpc 部署到Ganache 部署到Loom Testnet 部署到Basechain、好多好多。。。 说是现在摒弃了部署到testrcp,因为Ganache比testrpc更好用。 如果这些名词不知道啥意思,可以看前面的博客,里面记录了各种(太tm多了)名词。

创建项目

​​truffle init​​​新建一个空项目 但是我这里总是失败,所以我就用了从git上下载的另外一条命令。​​​git clone 第二种命令新建的项目会比第一种多一些东西,但是不需要用到。 contracts用于放solidity源码文件 migrations用于放部署文件 test用于放测试文件 truffle-config.js用于设置部署相关参数,后面都会一个一个用到。

写一个简单的solidity

在contracts目录里写一段代码,我这里保存为demo.sol

pragma solidity ^0.4.23;contract Demo { int x=5; //很喜欢5这个数字,所以就等于5了哈哈 function getX() public view returns (int) { return x; } function setX(int _x) public { x = _x; }}

部署配置文件

第1步 这时就需要编辑migrations目录下的文件, 新建一个js文件,命名为​​​2_demo_migration.js​​

注意,文件名以数字编号作为前缀,并以描述作为后缀。

var myContract = artifacts.require('./Demo.sol');module.exports = function(deployer) { deployer.deploy(myContract);}

通过artifacts.require告诉truffle要和哪些合约进行交互,返回一个合约的抽象,在后面就可以用这个合约的抽象了。注意这里最好不要用文件名称,因为一个文件里面可能有多个合约。

module.exports是nodejs的语法,通过这个可以导出一个函数供其他文件require的时候用。 其中deployer对象时执行部署任务的主要接口。

在部署脚本中,我们使用部署器来部署合约。也就是上面代码里的deployer.deploy,这个函数会严格按照我们代码的顺序部署。 比如说有两行代码​​​deployer.deploy(a); deployer.deploy(b);​​它就一定会先部署a再部署b。

第2步 编辑好部署脚本后就需要修改truffle-config.js文件,这个文件的作用就是用来配置部署到的网络,监听的端口等等。 这里就需要先用到上面提到的Ganache了,先开启它,搭建好一个测试网络。 默认​​​HTTP://127.0.0.1:7545​​,这在我们的config.js里面需要用到。

然后就去修改我们的truffle-config.js文件

networks: { development: { host: "localhost", // Localhost (default: none) port: 7545, // Standard Ethereum port (default: none) network_id: "*", // Any network (default: none) }, }

truffle编译

部署的最后一步

离成功不远了,希望不要出错

​​truffle migrate​​​ 注意,一旦部署就永远存在。但是在测试链中我们可以用​​truffle migrate --reset​​来重新部署。

这时请注意Ganache,第一个用户的gas已经减少了一些,哈哈哈太激动了(这个地方要突出本菜鸡的心理变化)。 这就意味着我们已经通过truffle把合约部署到了Ganache。

与合约互动

然后我们用truffle提供个命令行工具,​​truffle console​​来启动命令行。

把部署的一个实例绑定给一个变量​​​Test.deployed().then(instance => contract = instance)​​​ 这里的myContract就是我们在2_xx.js里定义的变量 使用deployed()函数获取一个已部署合约的实例,并将其分配给promise回调函数中的一个contract变量。 然后就可以很容易的通过contract.function.call()或者contract.function.send()来调用智能合约中的函数了

总结

菜鸡在部署的最后一步与合约互动出了点问题,一直没有办法获取那个变量。 后来重新生成一个项目做了一遍就好了。现在想想可能就是中间改了源码没有–all和–reset的原因吧。

再一个就是contract.function.call()这个语句中的function不要加括号。因为写函数调用写习惯了,就总是加个括号contract.function().call()一直不成功。

部署的学习总算是告一段落了。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:TikTok还有硬仗要打:美商务部硬怼法院裁决,11月另一禁令将生效!
下一篇:[区块链笔记8] 前端js通过metamask的web3与智能合约交互
相关文章

 发表评论

暂时没有评论,来抢沙发吧~