truffle+ganache-cli构建简单以太坊智能合约并编译部署

2023-05-16

    以前接触过以太坊工具链来做区块链练手项目,后来荒废了,如今再次捡起来,算是回忆和加深。

    之前可能因为网络的原因,在truffle各种初始化编译合成智能合约都遇到了好多问题,如今再次尝试,发现可以很快入门。

    下面来看看如何通过truffle与ganache-cli来构建以太坊合约。

    以太坊工具链就不多介绍了,这里面水很深,内容很多,本文需要的主要的就是node环境,然后就是ganache服务,部署合约的时候需要这个服务。truffle是进行合约编译部署的工具,可以初始化项目,编译合约,合成合约,部署合约。

   下面来看看如何做一个简单的智能合约。

    1、磨刀不误砍柴工;

    假定我们已经安装了node环境以及npm等工具。需要全局安装truffle,ganache-cli

npm install truffle ganache-cli -g

     安装好之后,我们可以看看版本信息:

    truffle自带solidity版本是0.5.16,web3版本是1.2.9

    

    ganache-cli是ethereum-testrpc的替代,所以不用再安装testrpc了。

    

     我们可以现在就启动ganache服务,它会监听localhost下的8545端口

    

    2、牛刀小试

        建立文件夹、初始化以太坊合约项目,编写智能合约。

    

    contracts/HelloWorld.sol  合约文件需要放在contracts目录下

    

    合成合约文件放在migrations目录下 ,合成文件名称也有讲究,就是以数字开头,带下划线

    

    3、齐活

    其实这里就是需要准备两个文件,一个是合约文件sol结尾,一个是合成合约文件,就是js文件

    HelloWorld.sol

pragma solidity ^0.5.0;

contract HelloWorld {
  string public name;
  constructor(string memory _name) public {
    name = _name;
  }

  function getName() public view returns(string memory){
    return name;
  }

  function setName(string memory _name) public {
    name = _name;
  }
}

    2_deploy_contract.js

const HelloWorld = artifacts.require("./HelloWorld.sol");

module.exports = function (deployer) {
  deployer.deploy(HelloWorld);
};

    合约部署这里,先挖一个坑,这里会引出一个报错,以及怎么解决。 

    4、见证奇迹

    修改truffle配置文件,在项目目录下有一个文件tuffle-config.js,这是truffle的配置文件,需要配置一个网络信息,就是前面开启的ganache服务信息,需要配置host,port,network_id:

    

    将配置中development这块的注释打开,默认是注释掉的。

    编译合约,合成合约,部署合约

  •     truffle compile   这句命令直接在命令行下运行就可以,它是用来编译合约的
  •     truffle console  这句命令是开启truffle开发者模式,会进入命令行交互模式,合成合约需要在这个交互模式下进行
  •     truffle migrate  这句命令是合成合约的,我们需要在开发者模式下运行

    

    进入开发者模式:

    

    这一步因为前面在编写合约的时候,写了一个构造函数constuctor(string memory _name),而我们在部署合约的代码里面没有加入 参数,所以会报错:"HelloWorld" -- Invalid number of parameters for "undefined". Got 0 expected 1!

    

    解决办法就是在部署合约代码中加入参数:

     

    合成合约,不报错,可以进行合约部署测试:

HelloWorld.deployed().then(instance=>contract=instance)

     

    合约调用:contract.getName()

    

    这里,在truffle development开发者模式下,函数可以进行自动补全,我们输入contract.get可以通过tab键来进行提示。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

truffle+ganache-cli构建简单以太坊智能合约并编译部署 的相关文章

随机推荐

  • 通过vue指令创建electron-vue模板项目出现一直“downloading template“问题

    今天试了一下 xff0c vue init simulatedgreg electron vue vueapp的时候 xff0c 在命令行下一直downloading template xff0c 让我很懊恼 原来vue init创建的时候
  • electron-vue与vuetify整合出现报错:If you‘re seeing “$attrs is readonly“

    如题所示 xff0c 正常情况下electron vue与vuetify的整合 xff0c 因为就是vue与vuetify的整合 xff0c 按照一般的推荐方法 xff0c 基本不会出错 xff0c 但是 xff0c 这里因为electro
  • VISA编程实例(C实现)

    今天写这个文章 xff0c 是因为自己工作中用到了ROHDE amp SCHWARZ xff08 即罗德 施瓦茨公司 xff09 的仪表设备 xff0c 需要通过编程的方式来读取仪表上功率测试结果 xff0c 本来仪表上显示了测试结果 xf
  • mac下通过gcc命令手动编译动态链接库示例

    编译动态链接库 xff0c windows linux mac平台各不相同 xff0c 从文件上来说 xff0c windows下是dll xff0c linux下是so xff0c mac下是dylib xff1b 命令上也会有区别 xf
  • c++中char[]与char*的转换以及char*与数字互转

    在c c 43 43 中 xff0c 字符串操作不可避免 xff0c 而且通常 xff0c char 或者char 就能表示字符串 xff0c 这个跟java语言有很大的差别 xff0c java中char是字符 xff0c string才
  • electron项目构建打包缺少dll文件的问题解决办法

    最近 xff0c 在做electron项目中 xff0c 使用了第三方dll xff0c 开发环境运行一切正常 xff0c 可是当我们打包 xff0c 最后生成的可执行程序再执行 xff0c 发现调用dll总是不成功 xff0c 猜测是少了
  • c/c++中的回调函数

    c c 43 43 中的回调函数是一个很奇怪的东西 xff0c 在java中 xff0c 方法调用的时候 xff0c 参数最多可以传入另一个对象实例 xff0c 然后在方法体内 xff0c 调用实例的方法 xff0c 做不到方法调用的时候
  • 在Windows下配置多个git账号

    本文记录在Windows下配置两个github账号的过程 1 生成并部署SSH key 安装好Git客户端后 xff0c 打开git bash xff0c 输入以下命令生成user1的SSH Key xff1a ssh keygen t r
  • windows命令行下通过cl命令编译动态链接库示例

    一般在windows下写一个c c 43 43 的动态链接库 xff0c 我们都是在visual studio或着visual c 43 43 这些ide里面进行编译和生成的 xff0c 今天介绍 xff0c 如何通过命令行来实现手动编译和
  • gdb命令调试c程序

    一般开发c语言程序 xff0c 都是在ide中编码 xff0c 调试也是使用集成环境 xff0c 有时候 xff0c 我们的程序是在文本编辑器中编写的 xff0c 这时候可能使用gcc编译 xff0c 然后运行可执行程序 遇到需要调试的场景
  • 选择排序算法与示例详解(c语言)

    选择排序是排序算法的一种 xff0c 思想就是 xff0c 每一轮寻找数组中最大的值或者最小的值 xff0c 放在头部或者放入一个新的数组 这样经历一轮遍历 xff0c 数组或者新数组就是排好序的 xff0c 他的目的很明确 xff0c 每
  • 2020年csdn盘点

    十年前就注册了csdn账号 xff0c 之后一直没有写过博客 xff0c 都是看别人的博客 xff0c 等到2015年左右发表了第一篇自己的博客 xff0c 直到2016年底觉着做技术的就需要记录自己的博客 xff0c 不仅是自己学习的过程
  • chrome浏览器安装react-devtools

    react devtools是react开发时的一个浏览器插件 xff0c 对于各大主流高级浏览器都有扩展程序可以安装 xff0c 官方的地址默认是https github com facebook react devtools xff0c
  • react+typescript项目构建

    react项目构建可以很简单 xff0c 但是如果是结合typescript xff0c 其实也不是很麻烦 xff0c 官网也有很明确的说明 有两种办法 xff1a 1 直接构建带有typescript的react项目 xff0c 我们需要
  • react项目启动报错:Uncaught TypeError: Cannot read property ‘forEach‘ of undefined

    如题 xff0c react项目启动报错 xff0c 具体信息 xff0c 如下所示 xff1a 这个问题是因为浏览器安装了react devtools扩展程序导致的 xff0c 很多人的解决办法就是直接禁用react devtools x
  • react组件之间传值

    看过一些文章介绍react组件之间传值 xff0c 无外乎以下几种情况 xff1a 父子组件之间相互传值 xff0c 兄弟节点之间传值 最常见的就是父子组件 xff0c 做法也很简单 xff1a 就是在父组件中直接通过props属性的方式将
  • 利用mocha进行以太坊智能合约编译部署测试

    使用智能合约编程语言solidity编写的智能合约 xff0c 除了可以直接通过以太坊的工具链truffle ganache cli进行测试之外 xff0c 还可以结合mocha进行单元测试 mocha单元测试本质上 xff0c 还是需要对
  • electron报错:Uncaught Error: A dynamic link library (DLL) initialization routine failed

    如题所示 xff0c 我们在进行node 43 electron开发桌面应用的时候 xff0c 经常会遇到这样的问题 xff1a 根据提示是因为ref依赖模块没有合适的编译版本 xff0c 但是我们进行npm install的时候没有报错啊
  • C语言 利用冒泡排序法对10个字符由小到大排序

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • truffle+ganache-cli构建简单以太坊智能合约并编译部署

    以前接触过以太坊工具链来做区块链练手项目 xff0c 后来荒废了 xff0c 如今再次捡起来 xff0c 算是回忆和加深 之前可能因为网络的原因 xff0c 在truffle各种初始化编译合成智能合约都遇到了好多问题 xff0c 如今再次尝