【web3实践 | 以太坊开发框架Truffle使用】

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

【web3实践 | 以太坊开发框架Truffle使用】

Truffle简介

Truffle是一个面向以太坊的开发框架,提供一整套构建、测试、部署以及管理智能合约的开发工具。Truffle可以与以太坊节点交互,使开发人员能够在本地开发、测试和部署智能合约。

Truffle提供了一个基于命令行的、易于使用的开发环境,可以通过Truffle来编写智能合约,进行本地测试和调试,进行远程部署,以及与以太坊网络进行交互。Truffle还提供了自己的智能合约编译器和构建管道,可以方便地构建、优化和管理智能合约的构建过程,减少了手动干预的需要。

Truffle还提供了强大的测试框架和开发助手,如:必要的开发环境、模拟器和快速开发模板等。此外,Truffle还提供了与夏加尔、Remix等其他开发工具的兼容性,使开发人员可以自由选择所需的工具进行整个开发过程。

Truffle有以下功能:

  • 内置的智能合约编译,链接,部署和二进制文件的管理。

  • 合约自动测试,方便快速开发。

  • 脚本化的、可扩展的部署与发布框架。

  • 可部署到任意数量公网或私网的网络环境管理功能

  • 使用EthPM和NPM提供的包管理,使用ERC190标准。

  • 与合约直接通信的直接交互控制台(写完合约就可以命令行里验证了)。

  • 可配的构建流程,支持紧密集成。

  • 在Truffle环境里支持执行外部的脚本。

一、安装Truffle

启动geth,然后我们来安装truffle。truffle是一个dapp的开发框架,它可以使得dapp的构建和管理非常容易。

你可以像这样使用npm安装truffle:>npm install -g truffle然后我们创建一个空目录,在下面创建truffle项目:

mkdir simple_voting_by_truffle_dapp
cd simple_voting_by_truffle_dapp
npm install -g webpack
truffle unbox webpack
truffle init: 在当前目录初始化一个新的truffle空项目(项目文件只有truffle-config.js 和truffle.js;contracts目录中只有Migrations.sol;migrations目录中只有1_initial_migration.js)。

truffle unbox: 直接下载一个truffle box,即一个预先构建好的truffle项目;unbox的过程相对会长一点,完成之后应该看到这样的提示:
【web3实践 | 以太坊开发框架Truffle使用】

二、创建项目

  • 安装truffle: npm install -g truffle
  • 检查安装成功:truffle version

truffle框架中本身存在几个项目,可以直接使用自带的pet-shop项目进行开发,用truffle unbox命令解压缩这个框架到我们的文件夹下

truffle unbox pet-shop

创建后的项目文件夹

  • contracts/:智能合约Solidity的源文件,包含一个迁移合约Migrations.sol。
  • migrations/:Truffle使用迁移系统来处理智能合约部署。迁移是一种额外的特殊智能合约,可以跟踪变化。
  • test/:包含智能合约的JavaScript和Solidity测试。
  • truffle-config.js:包含truffle配置文件。

三、 Ganache

Ganache是一个运行在本地的个人区块链,通过Ganache官网可以下载,其前身是TestRPC可以用来开发以太坊的个人区块链。

Gnanche下载链接:https://trufflesuite.com/ganache/

四 、编写智能合约

主要是在contracts中去新建Adoption.sol文件

pragma solidity ^0.5.0; //控制智能合约编译器的版本

contract Adoption {

  address[16] public adopters;  // 保存领养者的地址,是包括以太坊地址的数组

    // 领养宠物
  function adopt(uint petId) public returns (uint) {
    require(petId >= 0 && petId <= 15);  // 确保id在数组长度内

    adopters[petId] = msg.sender;        // 保存调用这地址
    return petId;
  }

  // 返回领养者
  function getAdopters() public view returns (address[16] memory) {
    return adopters;
  }

}

五、编译和迁移智能合约

Solidity是一种编译语言,需要编译成字节码,才可以执行在以太坊虚拟机(EVM);

truffle compile

编译成功合约之后需要迁移到区块链中,在migrations目录中创建新文件。

//创建自己的迁移文件-2_deploy_contracts.js var 
var Adoption = artifacts.require("Adoption");
module.exports = function(deployer) {
  deployer.deploy(Adoption);
};
 //在端口7454上运行本地区块链 
 truffle migrate

六、测试智能合约

pragma solidity ^0.5.0;


import "truffle/Assert.sol";   // 引入的断言
import "truffle/DeployedAddresses.sol";  // 用来获取被测试合约的地址
import "../contracts/Adoption.sol";      // 被用来测试的合约


contract TestAdoption {
  Adoption adoption = Adoption(DeployedAddresses.Adoption());
  // 领养测试用例
  function testUserCanAdoptPet() public {
    uint returnedId = adoption.adopt(8);

    uint expected = 8;
    Assert.equal(returnedId, expected, "Adoption of pet ID 8 should be recorded.");
  }

  // 宠物所有者测试用例
  function testGetAdopterAddressByPetId() public {
    // 期望领养者的地址就是本合约地址,因为交易是由测试合约发起交易,
    address expected = address(this);
    address adopter = adoption.adopters(8);
    Assert.equal(adopter, expected, "Owner of pet ID 8 should be recorded.");
  }

    // 测试所有领养者
  function testGetAdopterAddressByPetIdInArray() public {
  // 领养者的地址就是本合约地址

    //address expected = this;因为编译器版本是0.5.0,代码之前编写是按照0.4.17的规范来写的
    address expected=address(this);
    address[16] memory adopters = adoption.getAdopters();
    Assert.equal(adopters[8], expected, "Owner of pet ID 8 should be recorded.");
  }
}
//使用truffle test进行测试可以判断用例是否通过;

七、创建用户界面并和智能合约进行交互

src文件夹中进行界面的开发,主要是补充以太坊的功能,web3是一个实现了与以太坊节点通信的库,我们利用web3来和合约进行交互。优先使用MetaMask提供的Web3实例,truffle-contract会帮我们保存合约部署的信息。

八 、浏览器启动项目并进行交互

【web3实践 | 以太坊开发框架Truffle使用】

九 、安装MetaMask和配置区块链网络

MetaMask是一款插件形式的以太坊轻客户端,可以在官网直接下载https://metamask.io/
为了连接本地的网络,需要添加新网络

  • 创建新用户,并使用Ganache中其中一个地址的私钥导入账户,导入成功就会发现有免费的100ETH可以进行交易。

注意这里在和钱包进行连接的时候,需要先将对应的账户连接到目标网络后才能进行通讯,并使用钱包。

  • 启动项目
  • 点击Adopt,进行领养,成功将为Success。
    【web3实践 | 以太坊开发框架Truffle使用】

最后:可能出现的问题和解决方案

  • 如果由于gas不足而部署失败,尝试将

  • migrations/2_deploy_contracts.js里面的gas account增加至500000。比如:

  • deployer.deploy(Voting, [‘Rama’, ‘Nick’, ‘Jose’],{gas: 500000});

  • 如果你有多个账户,并且更喜欢自选一个账户,而不是accounts[0],你可以在truffle.js中指定想要使用的账户地址。在network_id后面添加 ‘from: your address’,truffle将会使用你指定的地址来部署和交互。

  • 如果部署顺利,你可以通过控制台和网页与合约进行交互文章来源地址https://www.toymoban.com/news/detail-468079.html

到了这里,关于【web3实践 | 以太坊开发框架Truffle使用】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 以太坊数据开发-Web3.py-安装连接以太坊数据

    Web3.py是连接以太坊的python库,它的API从web3.js中派生而来。如果你用过web3.js,你会对它的API很熟悉。但惭愧的是,作为一个以太坊上Dapp的开发者,我几乎没有直接使用过web3.js,也没有看过它的API。 https://web3py.readthedocs.io/ anaconda可以在环境中openTerninal进行安装 web3py需要通过数

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

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

    2024年02月13日
    浏览(48)
  • 使用 Web3.js 连接以太坊节点并查询区块链数据

    Web3.js 是一个用于连接以太坊网络的 JavaScript 库。在本文中,我们将介绍如何使用 Web3.js 来连接以太坊节点,并且查询以太坊区块链上的数据。 1. 安装 Web3.js 首先,我们需要安装 Web3.js。在命令行中,输入以下命令: 2. 连接以太坊节点 在使用 Web3.js 之前,我们需要先连接到以

    2023年04月26日
    浏览(46)
  • 以太坊 – 使用truffle console访问智能合约

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

    2024年02月02日
    浏览(47)
  • Web3、区块链、合约开发语言、框架、工具深度对比选型【万字长文】

    目录 前言 1. 智能合约语言 Solidity Vyper Rust 智能合约语言总结 Chainlink

    2023年04月09日
    浏览(43)
  • 【Web3】Web3连接到以太坊网络(测试网、主网)

    目录 什么是Web3 Web3项目连接以太坊网络 1.下载Web3 2.实例化Web3对象 3.infura 获取连接以太坊网络节点 4.添加网络节点 什么是Web3 web3.js开发文档:web3.js - Ethereum JavaScript API — web3.js 1.0.0 documentation web3.js 中文文档 : web3.js - 以太坊 JavaScript API — web3.js 中文文档 — 登链社区 github地

    2024年02月12日
    浏览(28)
  • 【Web3】认识以太坊钱包

    目录 区块链钱包概念 密码 私钥 Private Key 公钥Public Key  Keystore 助记词 Mnemonic 如何解锁账户 区块链钱包概念 钱包用来存钱的,在区块链中,我们的数字资产都会对应到一个账户地址上, 只有拥 有账户的钥匙(私钥)才可以对资产进行消费(用私钥对消费交易签名)。 数字

    2024年02月12日
    浏览(35)
  • web3系列———2.以太坊与智能合约

    主流币: 中本聪设计的比特币大获成功后,各种区块链和其对应的加密货币层出不穷,其中不乏新技术的使用,不过大部分的模仿货币最后都销声匿迹了,最终存活并存有大量用户的被称作主流币。 BTC比特币 ETH以太坊 LTC莱特币 XRP瑞波币 USDT (代币) USDC (代币) BUSD (代币) …

    2024年04月24日
    浏览(38)
  • Web3中文|关于以太坊“上海升级”,你需要知道哪些?

    今年3月,以太坊将进行自2022年9月转向权益证明系统以来的首次大升级,即上海硬交叉。一旦以太坊完成“上海升级”,帮助运营网络的验证者将能够提取1600万枚被质押的以太币(ETH)。 除了重点落实以太坊改进建议——4895(解锁验证者的提款权),根据全新且完整的更改

    2024年02月06日
    浏览(38)
  • web3描述以太坊与区块链之间的操作关系

    好通过前面两篇文章 Web3.0概念 web3带大家简单建立区块链概念 大家开始明白 web3.0是基于区块链为基础开发的 我们讲区块链多次提到以太坊 EVM 那这个东西到底是什么呢? 就现在的情况来讲 从零到一去搭建一个区块链环境 那可太难了 所以 以太坊一开始 确实是做一个加密货

    2024年02月09日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包