当前位置: 首页 > news >正文

使用Truffle、Ganache、MetaMask、Vue+Web3完成的一个简单区块链项目

文章目录

    • 概要
    • 初始化Truffle项目
    • 创建编写合约
    • 编译合约
    • 配置Ganache
    • 修改truffle-config.js文件
    • 编写迁移文件
    • 部署合约
    • 使用Truffle 控制台
    • 使用MetaMask和Vue+Web3与链交互

概要

使用Truffle、Ganache、MetaMask、Vue+Web3完成的一个简单区块链项目。

初始化Truffle项目

安装好truffle,执行命令。

truffle init

完成后目录如下。
在这里插入图片描述
在这里插入图片描述

创建编写合约

在contracts目录下创建编写合约。

在这里插入图片描述
准备一个简单的合约。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract SimpleStorage {// 存储一个数字uint256 private storedNumber;// 设置数字function setNumber(uint256 _number) public {storedNumber = _number;}// 获取数字function getNumber() public view returns (uint256) {return storedNumber;}
}

编译合约

在项目目录执

truffle compile

执行成功会在build/contracts目录下生成一个json文件, JSON 文件中,abi 和 bytecode 是与合约交互的关键部分。
在这里插入图片描述

配置Ganache

在这里插入图片描述点击New WorkSPACE配置,主要配置本地和端口号,本地的话我没就使用默认的。

在这里插入图片描述
配置完成后启动就行,默认有十个账户,都有以太。

在这里插入图片描述

修改truffle-config.js文件

在这里插入图片描述
修改两个地方,一个网络和合约版本,网络要和gannche里的一样,合约版本要一致或兼容。

在这里插入图片描述
在这里插入图片描述

编写迁移文件

在migrations目录下编写一个js文件。

在这里插入图片描述

const SimpleStorage = artifacts.require("SimpleStorage");module.exports = function (deployer) {deployer.deploy(SimpleStorage);
}

迁移文件用于管理和自动化智能合约的部署过程。每当你需要将合约部署到区块链网络时,迁移文件会帮助你定义和执行这一过程。

部署合约

项目目录下执行命令

truffle migrate

部署完成后查看Ganache。
在这里插入图片描述在这里插入图片描述

使用Truffle 控制台

部署完成后项目目录下执行

truffle console
let instance = await SimpleStorage.deployed();
//
await instance.setNumber(42);
//
let number = await instance.getNumber();
//
console.log(number.toString());

验证合约。

使用MetaMask和Vue+Web3与链交互

创建Vue项目,安装web3。编写两个简单的页面,一个用于连接钱包,一个用于合约交互。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意需要编译好的合约json文件。

启动项目。

在游览器插件中安装MetaMask。

在这里插入图片描述
点击连接钱包,会弹出MetaMask。
选择导入钱包。输入Ganache中产生的助记词。
在这里插入图片描述连接到钱包。

在这里插入图片描述

点击登入。
在这里插入图片描述
输入数字。点击set。会弹出MetaMask。

在这里插入图片描述

点击确认交易。提示交易成功。
在这里插入图片描述
点击查询就可以查看到钢材输入的数字。

然后查看Ganache,看到块变化和交易信息。
在这里插入图片描述
在这里插入图片描述
至此,一个简单的区块链就实现了。

http://www.lryc.cn/news/544995.html

相关文章:

  • 初出茅庐的小李博客之按键驱动库使用
  • 如何调试Linux内核?
  • ECharts组件封装教程:Vue3中的实践与探索
  • NAT 代理服务 内网穿透
  • CAN硬件协议详解
  • 网络安全等级保护:网络安全等级保护基本技术
  • 信刻光盘安全隔离与信息交换系统让“数据摆渡”安全高效
  • 数据结构课程设计(java实现)---九宫格游戏,也称幻方
  • [思考记录]AI时代下,悄然的改变
  • JAVA笔记【一】
  • [Java基础] 常用注解
  • uvm中的run_test作用
  • brew search报错,xcrun:error:invalid active developer path CommandLineTools
  • C#内置委托(Action)(Func)
  • kubernetes 部署项目
  • 《几何原本》命题I.2
  • 【我的 PWN 学习手札】House of Kiwi
  • nvm的学习
  • haclon固定相机位标定
  • stm32(hal库)学习笔记-时钟系统
  • 【Java项目】基于SpringBoot的财务管理系统
  • Qt中如果槽函数运行时间久,避免阻塞主线程的做法
  • 曹操智行构建国内首个全域自研闭环智驾生态
  • day02_Java基础
  • SpringSecurity 实现token 认证
  • 轻松实现语音生成:GPT-SoVITS V2整合包的远程访问操作详解
  • 解锁状态模式:Java 编程中的行为魔法
  • 算法与数据结构(相交链表)
  • 浅入浅出Selenium DevTools
  • 软件工程---净室软件工程