IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> Truffle-Petshop -> 正文阅读

[区块链]Truffle-Petshop

Truffle-Petshop项目搭建

关于本项目,你需要的一些准备工作。

  • 安装vscode(推荐)
  • 安装 ganache(也可以不安装,不过推荐安装,可以用于本地私有链测试)
  • 安装metamask(虚拟币钱包插件,可在chrome应用商店下载)
  • 安装Nodejs:下载地址https://nodejs.org/en/download/
  • 当然对于nodejs你可能需要一些配置,可以在网上找到教程。
  • 安装 Truffle :npm install -g truffle
  • 安装ganache-cli:npm install -g ganache-cli(脚手架,用于创建区块链,所以ganache在此项目中是一个可选项而不是必选,但是本人选择直接用了本地的ganache)

安装过程可以参考:区块链DAPP-基于Truffle框架的宠物商店_黄豆2019的博客-CSDN博客

这里主要讲一下这个项目的大概目录与架构。

如何引入项目?

在项目目录运行:
truffle unbox pet-shop

关于truffle目录结构的介绍:

contract:solidity智能合约所在的目录
----这里有一个重要的合约Migrations.sol(在后面介绍)

migrations:Truffle使用迁移系统来处理智能合约部署。迁移是一个附加的特殊智能合约,用于跟踪更改。

test:测试文件所在的目录,智能合约的JavaScript和Solidity测试

truffle.js:truffle项目的配置文件

在本项目中使用到的truffle命令:

truffle compile
  ---用于将Solidity编译为字节代码,以供以太坊虚拟机(EVM)执行

添加合约代码:

contracts > Adoption.sol

pragma solidity >=0.4.22 <0.8.0;

contract Adoption{

  address[16] public adopters;

  function adopt(uint petId) public returns (uint){
    require(petId<=15 && petId>=0);
    adopters[petId] = msg.sender;//记录领养者地址
    return petId;
  }

  /*此处该数组若未声明为memory变量会报错
  因为memory表示值变量,即只是复制副本;而默认为storage是引用变量,所有的引用都实际只想一处
  如果这里是storage变量,则外部可以修改该变量,这显然不符合区块链的安全性原则

  view只读 pure不读写
  */
  function getAdopters() public view returns (address[16] memory){
    return adopters;
  }
}

添加完成后编译合约:

truffle compile

预期输入:
Compiling .\contracts\Adoption.sol...

Compiling .\contracts\Migrations.sol...

Writing artifacts to .\build\contracts

创建迁移脚本

migrations目录中创建迁移脚本,告诉Truffle如何部署智能合约,在该目录中创建文件2_deploy_contracts.js

注意,在migrations目录中所有文件都有编号,作用是让Truffle知道执行它们的顺序。

2_deploy_contracts.js文件内容如下:

migrations > 2_deploy_contracts.js

var Adoption = artifacts.require("Adoption");

module.exports = function(deployer) {

  deployer.deploy(Adoption);

};

上面的代码中:

  • 首先,require了创建的合约,并将其分配给一个名为“Adoption”的变量。
  • 接着,将合约加入部署清单,运行迁移命令时合约将被部署。

修改配置文件:

修改dapp-guide-pet-shop配置文件truffle-config.js,连接本地地址和端口。

在这里插入图片描述

这个develop配置也不知道是哪里来的,,但是对我这个项目没有用

如果你已经下载了ganache,可以直接进行迁移(记得先把gannache打开),如果你没有下载gannache,请输入命令:

我们将使用ganache-cli,来开启一个私链来进行开发测试,可用于部署合同,开发应用程序和运行测试,设置端口:8545。

ganache-cli >> D:\xxx\你想存放的路径\ganachetrace.log

日志输出至指定的文件,默认启动的10个钱包账户和对应的私钥地址,账户余额均为100ETH。

执行迁移命令:

truffle migrate

matamask联动使用

区块链DAPP-基于Truffle框架的宠物商店_黄豆2019的博客-CSDN博客

添加的代码

test > TestAdoption.sol

pragma solidity ^0.5.0;

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

contract TestAdoption {
  // The address of the adoption contract to be tested
  Adoption adoption = Adoption(DeployedAddresses.Adoption());

  // The id of the pet that will be used for testing
  uint expectedPetId = 8;

  //The expected owner of adopted pet is this contract
  address expectedAdopter = address(this);

  // Testing the adopt() function
  function testUserCanAdoptPet() public {
    uint returnedId = adoption.adopt(expectedPetId);

    Assert.equal(returnedId, expectedPetId, "Adoption of the expected pet should match what is returned.");
  }

  // Testing retrieval of a single pet's owner
  function testGetAdopterAddressByPetId() public {
   address adopter = adoption.adopters(expectedPetId);

   Assert.equal(adopter, expectedAdopter, "Owner of the expected pet should be this contract");
  }

  // Testing retrieval of all pet owners
  function testGetAdopterAddressByPetIdInArray() public {
   // Store adopters in memory rather than contract's storage
   address[16] memory adopters = adoption.getAdopters();

   Assert.equal(adopters[expectedPetId], expectedAdopter, "Owner of the expected pet should be this contract");
  }
}

输入命令:

>truffle test

Using network 'development'.

Compiling .\test\TestAdoption.sol...

添加代码的案例:一些对链,合约的初始化

区块链DApp从零开始学 (二) | 超详细 DApp创建 | 发行代币token | 宠物领养_111辄的博客-CSDN博客

并重新初始化petshop’

运行:npm run dev

如果你的ganache cli出现问题的话,可以考虑直接使用ganache。

以太坊开发------使用Ganache CLI在私有链上搭建智能合约_bk1171676983的博客-CSDN博客

如果你对metamask与私有链的连接使用有一些疑惑的话:

1.打开gannache

2.执行迁移命令

3.npm run dev

4.将ganache中第一个账户的私钥导入到钱包里成为一个新的账户

关于ganache cli报错:版本过低。

Error: Callback was already called.
at F:\Nodejs\node_global\node_modules\ganache-cli\build\ganache-core.node.cli.js:25:273
at f. (F:\Nodejs\node_global\node_modules\ganache-cli\build\ganache-core.node.cli.js:25:2116)
at f.emit (node:events:513:28)
at f.destroy (F:\Nodejs\node_global\node_modules\ganache-cli\build\ganache-core.node.cli.js:37:906702)
at finish (node:internal/streams/writable:769:14)
at processTicksAndRejections (node:internal/process/task_queues:83:21)

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:39:00  更:2022-10-17 12:40:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:44:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码