如何使用Truffle开发太坊智能及其区块链

这篇具有很好参考价值的文章主要介绍了如何使用Truffle开发太坊智能及其区块链。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 文章来源地址https://www.toymoban.com/news/detail-633888.html

安装 Truffle

构建一个Truffle项目

浏览一下这个项目

测试项目

编译智能合约

使用 Ganache 部署项目

与智能合约交互

搭建自连网络

truflle初始化项目


Stairs upon the temple I climb and I crawl 

Wonder how much further I'll go

Feet that fall apart till I walk on my ankles

Can I finish

I just don't know

 简介: truffle是以太坊(ethereum)开发智能合约(smart contract)智能框架,本教程来安装构建一个基本的Truffle项目并部署一个智能合约到区块链。

 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,里面有很多的示例应用程序和项目模板。本文使用MetaCoin box,它创建一个可以在帐户之间传输代币的应用程序示例。

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

2.打开 truffle.js ,用下面的内容替换:

module.exports = {
  networks: {
    development: {
      host: "127.0.0.1",
      port: 7545,
      network_id: "*"
    }
  }
};

这样就可以使用Ganache的默认参数进行连接了。

3.保存一下这个文件。

4.启动 Ganache

 

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]);}).t
  1. 启动一个连接到节点的交互控制台,您可以参考文档开启geth交互控制台来建立一个交互控制台

  2. 在交互控制台输入以下指令,创建一个以太坊账户。如果您已经在节点上创建了以太坊账户,您也可以使用已有账户完成后续操作。

     
    1. // create a account that use empty password
    2. var account = personal.newAccount("");
    3. // using an existing account in node
    4. // var account = eth.accounts[0]
    5. // unlock account for 300 seconds with empty password
    6. personal.unlockAccount(account, "", 300);
    7. // set it as default account
    8. web3.eth.defaultAccount = account;
  3. 使用solc或truffle等第三方编译工具,编译智能合约,获取智能合约的ABI和字节码(bytecode)。您可以参考编译智能合约编译您的智能合约。

  4. 在交互控制台输入以下示例命令,在Quorum网络中部署智能合约。在您需要部署自己的智能合约时,您需要将abibytecode替换为您智能合约的编译结果。

     
    1. // abi for contract
    2. var abi = [{"constant":true,"inputs":[],"name":"storedData","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"x","type":"uint256"}],"name":"set","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"retVal","type":"uint256"}],"payable":false,"type":"function"},{"inputs":[{"name":"initVal","type":"uint256"}],"payable":false,"type":"constructor"}];
    3. // compiled solidity bytecode code using https://github.com/jpmorganchase/quorum-examples/blob/master/examples/7nodes/simplestorage.sol
    4. var bytecode = "0x6060604052341561000f57600080fd5b604051602080610149833981016040528080519060200190919050505b806000819055505b505b610104806100456000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632a1afcd914605157806360fe47b11460775780636d4ce63c146097575b600080fd5b3415605b57600080fd5b606160bd565b6040518082815260200191505060405180910390f35b3415608157600080fd5b6095600480803590602001909190505060c3565b005b341560a157600080fd5b60a760ce565b6040518082815260200191505060405180910390f35b60005481565b806000819055505b50565b6000805490505b905600a165627a7a72305820d5851baab720bba574474de3d09dbeaabc674a15f4dd93b974908476542c23f00029";
    5. var address = ""
    6. var simpleContract = web3.eth.contract(abi);
    7. var simple = simpleContract.new(42, {
    8. from: account,
    9. data: bytecode,
    10. gas: 0x47b760
    11. }, function(e, contract) {
    12. if (e) {
    13. console.log("err creating contract", e);
    14. } else {
    15. if (!contract.address) {
    16. console.log("Contract transaction send: TransactionHash: " + contract.transactionHash + " waiting to be mined...");
    17. } else {
    18. console.log("Contract mined! Address: " + contract.address);
    19. address = contract.address
    20. console.log(contract);
    21. }
    22. }
    23. });
  5. 当部署智能合约的交易被共识节点打包,您可以在交互控制台看到您部署的合约地址,后续您可以向该地址发起交易,调用智能合约。

 

整个过程主要演示chrome扩展 METAMASK, OpenZepplin库和truffle框架的使用。

搭建自连网络

主要参考之前的以太坊-私有链搭建初步实践, 这里只用单节点的网络。

还是先准备账户:

mkdir node0
# 会在node0/keystore目录里生成一个keyfile json文件
geth --datadir node0 account new

#利用puppeth生成genesis.json的过程不表,参考上边的链接
geth --datadir node0 init genesis.json

# 把刚才的账号的密码写入node0/password文件
# 启动私链,顺便开启console
echo node0 > node0/password
geth --datadir node0 --port 30000 --nodiscover --unlock '0' --password ./node0/password --mine --rpc --rpccorsdomain "*" --rpcapi "eth,net,web3,admin,personal" console

我们把这个账号的json文件导入到chorme插件metamask里,便于后面调试和演示

 

ubuntu系统上的chrome插件会有窗口消失的bug,在URL栏里打开chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/popup.html

truflle初始化项目

需要下载truffle命令号

npm install -g truffle

mkdir token && cd token

# 利用trulle下载token代笔示例
truffle unbox tutorialtoken

npm intall zeppelin-solidity

如上必要的依赖框架和库已经下载到了本地, 接下来就创建自己的代币合约

在contract目录创建TutorialToken.sol文件,内容如下:

pragma solidity ^0.4.11;


import 'zeppelin-solidity/contracts/token/StandardToken.sol';


/**
 * @title SimpleToken
 * @dev Very simple ERC20 Token example, where all tokens are pre-assigned to the creator. 
 * Note they can later distribute these tokens as they wish using `transfer` and other
 * `StandardToken` functions.
 */
contract TutorialToken is StandardToken {

  string public name = "TutorialToken";
  string public symbol = "SIM";
  uint256 public decimals = 18;
  uint256 public INITIAL_SUPPLY = 10000;

  /**
   * @dev Contructor that gives msg.sender all of existing tokens. 
   */
  function TutorialToken() {
    totalSupply = INITIAL_SUPPLY;
    balances[msg.sender] = INITIAL_SUPPLY;
  }

}

在以太坊里几乎所有操作都是当做交易来看的,部署合约就是一种交易,交易就要花钱(gas消耗),所以truffle做的是增量部署(少消耗gas),现在在migrations目录添加新的部署文件2_deploy_contracts.js

var TutorialToken = artifacts.require("./TutorialToken.sol");

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

一切准备就绪,编译,部署开始:

 

# 编译
  truffle compile
Compiling ./contracts/Migrations.sol...
Compiling ./contracts/TutorialToken.sol...
Compiling zeppelin-solidity/contracts/math/SafeMath.sol...
Compiling zeppelin-solidity/contracts/token/BasicToken.sol...
Compiling zeppelin-solidity/contracts/token/ERC20.sol...
Compiling zeppelin-solidity/contracts/token/ERC20Basic.sol...
Compiling zeppelin-solidity/contracts/token/StandardToken.sol...
Writing artifacts to ./build/contracts
# 根据truffle.js的配置进行部署
  truffle migrate
Using network 'development'.

Running migration: 1_initial_migration.js
  Deploying Migrations...
  ... 0x65ccd2d6a4f4248466dd7887da7a2ac35d18c7ab0ec826cb25580bc785a2c3b8
  Migrations: 0xc64569558f90302f4b3884929ac5540c645674dc
Saving successful migration to network...
  ... 0xf9043ca886d352f05a05642047f63eed11d9b328fb815becc68baffc4d953d60
Saving artifacts...
Running migration: 2_deploy_contracts.js
  Deploying TutorialToken...
  ... 0x19350625474c36316046b103e671eaad45834a60c17a5b9c64cf96316754560f
  TutorialToken: 0x7f469dc1ec17c3b7c52a3ad74611cb4b7e6807e1
Saving successful migration to network...
  ... 0xe57ba56dd5f1b18d410577def8bc7089f7de56e8d8718c3098430995d4b81353
Saving artifacts...

顺便分享两个教程给大家,可以看一眼:

一个适合区块链新手的以太坊DApp开发:
http://xc.hubwiz.com/course/5a952991adb3847553d205d1

一个用区块链、星际文件系统(IPFS)、Nodejs和MongoDB构建电商平台:
http://xc.hubwiz.com/course/5abbb7acc02e6b6a59171dd6

 

 

 

 

 

 

到了这里,关于如何使用Truffle开发太坊智能及其区块链的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Web3本地搭建truffle智能合约开发环境

    之前的几篇文章 我们是成功的操作了我们本地区块链的 那么 本文 我们就来说说智能合约 啊 不容易啊 扯了这么久 终于到这了 智能合约是部署在区块链上 不可逆的 一种去中心化的程序,他没有任何第三方公司来管理这个程序和数据 然后 还有就是怎么连接到区块链上的智能

    2024年02月12日
    浏览(41)
  • 以太坊 – 使用truffle console访问智能合约

    🍁 博主简介 :         🏅云计算领域优质创作者         🏅2022年CSDN新星计划python赛道第一名         🏅2022年CSDN原力计划优质作者         🏅阿里云ACE认证高级工程师         🏅阿里云开发者社区专家博主 💊 交流社区 :CSDN云计算交流社区欢迎您的

    2024年02月02日
    浏览(48)
  • 使用Truffle编译智能合约及所遇到的问题

    1.下载安装nvm,首先安装目录不要有空格和中文,会出现乱码 2、解压之后安装,安装后自动配置环境变量 3、nvm -v 查看版本 4、通过如下指令进行node版本的安装、替换 我是通过VS code 打开项目,编辑truffle-config.js文件 配置本地以太坊网络和远程的以太坊测试网络方式有所差异

    2023年04月08日
    浏览(41)
  • 使用Truffle for Vscode插件部署本地智能合约

    Truffle Truffle简介 Truffle是使用以太坊虚拟机(EVM)的世界级区块链开发环境、测试框架和资产管道,旨在让开发人员的开发效率更高。Truffle工具套件(truffle suite)分为四个部分Truffle、Ganache,dirzzle,Truffle for Vscode。其中Ganache提供了“One click blockchain”功能,只要点击运行ganache就能

    2024年02月07日
    浏览(72)
  • truffle 进行智能合约测试

    以太坊区块链开发 truffle 入门教程 1_哔哩哔哩_bilibili 快速入门 Truffle | Truffle 中文文档 - DApp 开发框架 | 深入浅出区块链 (learnblockchain.cn) 下载node.js  利用npm 下载truffle :  npm install -g truffle 安装vscode 插件、   下载完成会多一个这个标志,然后点进去,会让检测让你下载几个东

    2024年02月16日
    浏览(50)
  • Web3 通过truffle 脚本进行智能合约测试

    上文 Web3 处理智能合约部署到本地区块链,并在本地进行测试中 我们讲解了部署智能合约 然后在终端测试的方法 但上文那种终端测试 其实并不保险 而且也比较不专业 对于这个 有一个mocha测试 这是基于node部署环境的一种环境测试 但是这个需要一定的基础 大家可以专门去学

    2024年02月13日
    浏览(50)
  • 区块链智能合约开发学习

    最近正在肝区块链知识学习,入手学习智能合约的开发,由于网上资料实在是太少了,好不容易东拼西凑完成了智能合约的开发、编译、部署、web3js调用(网页页面)和web3j调用(java调用),赶紧趁热把重点提炼出来。 先上图,是我最近学习知识点的一个概括总结,此外还包

    2023年04月18日
    浏览(42)
  • 区块链java开发智能合约nf(部署第一个NFT智能合约)

    手把手教你区块链java开发智能合约nft-第二篇(部署第一个NFT智能合约) 刚搞区块链开发真的是太累了,自己摸石头过河,动不动就报错,网上搜索错误,一律看不出什么问题,或者报错的信息太少,问同事同事不鸟,问领导,领导也烦,无奈,对于英文不好的我,只能被迫

    2024年02月12日
    浏览(57)
  • 区块链2——Solidity智能合约开发

    区块链 索引目录 智能合约是一种以代码形式编写的自动执行合约,它们运行在区块链上。这些合约定义了在特定条件下发生的事件以及相应的行为。 1.1 智能合约结构 版本声明(Version Declaration): 智能合约通常以声明版本开始,指定合约应该使用的Solidity编译器版本。例如

    2024年02月05日
    浏览(69)
  • 以太坊区块链之使用truffle框架完成简单投票Dapp开发

    编写环境 remix 话不多说,直接上代码 1、启动ganache 2、在 /contracts 目录下加入新建一个.sol文件,将之前编写的智能合约代码加入该文件中,博主新建的是一个 Voting.sol 的文件 !!!该文件目录一定要与智能合约代码名字相对应 3、修改truffle-config.js 将development内的host、port改

    2024年02月09日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包