安装环境

Truffle && Ganache

Truffle是最全面的智能合约开发套件

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

  • 使用断点、变量分析和步骤功能进行高级调试。

  • Truffle基于JavaScript编写,可以在智能合约中使用console.log进行调试

  • 通过MetaMask和Truffle Dashboard进行部署和交易,保护你的助记词。

  • 在Truffle环境中执行脚本的外部脚本运行器。

  • 用于快速开发的自动化合约测试。

  • 使用NPM进行包管理,使用ERC190标准

  • 可编写脚本、可扩展的部署和迁移架构

  • 可用于合同通信的交互式控制台

# 安装node
nvm install 18# 安装Truffle
npm install -g truffle
# 查看Truffle版本
truffle version# 安卓ganache
https://trufflesuite.com/docs/ganache/quickstart/

安装IDE插件

https://marketplace.visualstudio.com/items?itemName=trufflesuite-csi.truffle-vscode

https://trufflesuite.com/blog/build-on-web3-with-truffle-vs-code-extension/

vscode安装Truffle for VS Code

使用说明

#新建项目
make dir fcoin
cd fcoin
truffle init

init后会创建

  • Contracts 文件夹

  • Migrations 文件夹

  • Tests 文件夹

  • truffle-config.js Truffle Configuration 文件

配置文件truffle-config.js 里的network是要部署的链。其中"development"部分是命令"truffle develop"对应的网络

    development: {host: "127.0.0.1",     // Localhost (default: none)port: 9545,            // Standard Ethereum port (default: none)network_id: "*",       // Any network (default: none)},

可以跟ganache对应

开始编码

参考:https://blog.whiteprompt.com/solidity-development-environment-setup-explained-b4e613503f8d

合约

写个sol代码Counter.sol

// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;
contract Counter {uint private count;constructor(uint _initialCount) public {count = _initialCount;}function incrementBy(uint _increment) public {count = count + _increment;}function getCount() public view returns (uint) {return count;}
}

migrations

执行命令

ruffle create migration deploy_counter

增加部署代码

const Counter = artifacts.require('Counter');module.exports = function(_deployer) {// Use deployer to state migration tasks._deployer.deploy(Counter, 1);
};

部署

truffle migrate

部署成功,合约地址

> contract address: 0xA54d15330a0fFA3C2578c72aa0A3Be537d485D27

交互

#注意,你已经打开了 truffle develop#初始化,调用合约
let instance = await Counter.at("0xA54d15330a0fFA3C2578c72aa0A3Be537d485D27")
#获取合约里的初始化数字
instance.getCount()

返回内容,word后面的1是值

BN { negative: 0, words: [ 1, <1 empty item> ], length: 1, red: null }

instance.incrementBy(88)
# 返回89
instance.getCount()

其他案例

https://blog.csdn.net/VictorXSS/article/details/127852997

这个文档中,要注意migrations里,要加2_deploy_contracts.js

// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;contract Pair{string private _name;uint private _liquidity;constructor(string memory name){_name = name;}function addLiquidity(uint amount) public {_liquidity+=amount;}function getLiquidity() public view returns(uint){return _liquidity;}function getName() public view returns(string memory){return _name;}}contract Dex {address private _owner;uint private _index = 0;mapping(address => Pair) private _pairs;mapping(uint => address) private _indexs;modifier onlyOwner(){require(msg.sender == _owner,"must be owner");_;}event PairCreated(string name, address pairAddress);event AddLiquidity(address pairAddress, uint liquidity);function createPair(string memory name) public {Pair pair = new Pair(name);_pairs[address(pair)] = pair;_indexs[_index] = address(pair);_index++;emit PairCreated(name, address(pair));}function addLiquidity(address pairedAddress,uint liquidity) public {_pairs[pairedAddress].addLiquidity(liquidity);emit AddLiquidity(pairedAddress,liquidity);}function getCount() public view returns(uint){return _index;}function pairAddress(uint index) public view returns(address){return _indexs[index];}function getPairName(address pairedAddress) public view returns(string memory){return _pairs[pairedAddress].getName();}function getLiquidity(address pairedAddress) public view returns(uint liquidity){return _pairs[pairedAddress].getLiquidity();}
}

核心代码

# solidity 里的代码
emit PairCreated(name, address(pair));emit AddLiquidity(pairAddress,liquidity);
# subgraph.yaml    eventHandlers:- event: PairCreated(string,address)handler: handleNewPairCreated- event: AddLiquidity(address,uint256)handler: handleAddLiquidity
import {AddLiquidity, PairCreated} from '../generated/study/Dex'
import {Pair} from '../generated/schema'export function handleNewPairCreated(event: PairCreated): void {let pair = new Pair(event.params.pairAddress.toHexString())pair.displayName = event.params.namepair.liquidity = 0pair.save()
}export function handleAddLiquidity(event: AddLiquidity): void {let id = event.params.pairAddress.toHexString()let pair = Pair.load(id)if (pair == null) {return}pair.liquidity += event.params.liquidity.toI32()pair.save()
}
  • PairCreated 是solidity里的emit方法

  • handleNewPairCreated 是mapping.ts 里的代码

  • 当solidity里的PairCreated 被调用时,会触发handleNewPairCreated,保存数据。保存数据可以是数据库或者文件

  • 触发是由provider里提供的

  • provider 是Web3 provider is a website running geth or parity node which talks to Ethereum network.

调用

https://blog.csdn.net/qq_41882147/article/details/82966783

参考

https://blog.csdn.net/u013705066/article/details/123573546

https://blog.quicknode.com/the-importance-of-web3-provider-redundancy

https://ethereum.stackexchange.com/questions/31218/what-are-providers-in-the-ethereum

https://techfi.tech/introduction-to-the-graph-the-google-of-web3/

https://thegraph.academy/developers/local-development/

https://blog.whiteprompt.com/solidity-development-environment-setup-explained-b4e613503f8d?gi=cac56d9e3cc4

ganache truffle thegraph 笔记 step by step相关推荐

  1. MDX Step by Step 读书笔记 - 个人专题(一) 如何理解 MDX 查询中WHERE 条件如何对应Cube 中的切片轴 Slicer Axis...

    这篇文章原本应该写在第四章的读书笔记里, 但是篇幅太长,而且主要示例和图解都是基于我自己的理解, 所以单独成文(可以先看看第四章读书笔记内容). 这一部分基础内容我个人觉得非常重要, 之前看过一次 M ...

  2. 转~MDX Step by Step 读书笔记(四) - Working with Sets

    查阅我的其它有关 MDX 的学习笔记 - <<Microsoft SQL Server 2008 MDX Step by Step>> 学习笔记连载目录 1. Set  - 元 ...

  3. 数据库设计 Step by Step (2)——数据库生命周期

    引言:数据库设计 Step by Step (1)得到这么多朋友的关注着实出乎了我的意外.这也坚定了我把这一系列的博文写好的决心.近来工作上的事务比较繁重,加之我期望这个系列的文章能尽可能的系统.完整 ...

  4. Step by Step演示如何训练Pytorch版的EfficientDet

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx Paper:https://arxiv.org/abs/1911.09070 Base Git ...

  5. 【Step By Step】将Dotnet Core部署到Docker下

    一.使用.Net Core构建WebAPI并访问Docker中的Mysql数据库 这个的过程大概与我之前的文章<尝试.Net Core-使用.Net Core + Entity FrameWor ...

  6. python写一个通讯录step by step V3.0

    python写一个通讯录step by step V3.0 更新功能: 数据库进行数据存入和读取操作 字典配合函数调用实现switch功能 其他:函数.字典.模块调用 注意问题: 1.更优美的格式化输 ...

  7. C#2.0实例程序STEP BY STEP--实例二:数据类型

    C#2.0实例程序STEP BY STEP--实例二:数据类型 与其他.NET语言一样,C#支持Common Type Sysem(CTS),其中的数据类型集合不仅包含我们熟悉的基本类型,例如int, ...

  8. 文本分类step by step(二)

    (注:如有转载请标明作者:finallyliuyu, 和出处:博客园) <文本分类 step by step(一)> 在<文本分类step by step(一)>中,我们从处理 ...

  9. 数据库设计Step by Step (9)——ER-to-SQL转化

    2019独角兽企业重金招聘Python工程师标准>>> 引言:前文(数据库设计 Step by Step (8)--视图集成)讨论了如何把局部ER图集成为全局ER图.有了全局ER图后 ...

最新文章

  1. 命令 / Linux / 常用的解压缩的命令
  2. SAP UI5 binding syntax - model name + + attribute name
  3. ASP.NET Core loves JavaScript
  4. 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery )
  5. HDU3534 给你一个树让你找出其中最长路径以及个数数
  6. 数据写入mysql的方式,FMDB写入大量数据的处理方法
  7. 多线程程序中操作的原子性--转帖
  8. Hyperledger Fabric教程(1)--Hyperledger Fabric 老版本 1.1.0 快速部署安装
  9. android图标分组名称唯美,手机屏幕分组好听名字
  10. iTerm2使用zmodem协议上传下载文件
  11. SQL Server_SQL Server Windows NT - 64 bit
  12. leetcode刷题方法
  13. linux系统编程3—文件存储函数
  14. Java--JSP四大作用域、九大内置对象
  15. 虚拟内存与虚拟存储器的区别
  16. 中科院院士!南京大学,迎来新校长
  17. 桥牌坐庄训练bm2000 level3闯关记录——A5
  18. node-rsa 加减密与java rsa加减密 互调 相互加减密
  19. 大数据毕设选题 - 深度学习股票预测系统(python Django)
  20. 【星云测试】星云精准测试之用例魔方

热门文章

  1. Python之Re模块匹配正则表达式详解
  2. [安全分析报告]门磁报警系统破解猜想
  3. ORMLite does not know how to store class java.util.ArrayList错误的解决
  4. 多人在线协作实现的概要设计
  5. Flutter开发学习课程携程app开发(三)
  6. html导出 word文档教程
  7. 计算机考试准考证暂无照片
  8. Google App Engine10年,支持更多你喜欢的编程语言
  9. Matplotlib基本使用简介
  10. VS编译时常见报错处理