ganache truffle thegraph 笔记 step by step
安装环境
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相关推荐
- MDX Step by Step 读书笔记 - 个人专题(一) 如何理解 MDX 查询中WHERE 条件如何对应Cube 中的切片轴 Slicer Axis...
这篇文章原本应该写在第四章的读书笔记里, 但是篇幅太长,而且主要示例和图解都是基于我自己的理解, 所以单独成文(可以先看看第四章读书笔记内容). 这一部分基础内容我个人觉得非常重要, 之前看过一次 M ...
- 转~MDX Step by Step 读书笔记(四) - Working with Sets
查阅我的其它有关 MDX 的学习笔记 - <<Microsoft SQL Server 2008 MDX Step by Step>> 学习笔记连载目录 1. Set - 元 ...
- 数据库设计 Step by Step (2)——数据库生命周期
引言:数据库设计 Step by Step (1)得到这么多朋友的关注着实出乎了我的意外.这也坚定了我把这一系列的博文写好的决心.近来工作上的事务比较繁重,加之我期望这个系列的文章能尽可能的系统.完整 ...
- Step by Step演示如何训练Pytorch版的EfficientDet
向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程 公众号:datayx Paper:https://arxiv.org/abs/1911.09070 Base Git ...
- 【Step By Step】将Dotnet Core部署到Docker下
一.使用.Net Core构建WebAPI并访问Docker中的Mysql数据库 这个的过程大概与我之前的文章<尝试.Net Core-使用.Net Core + Entity FrameWor ...
- python写一个通讯录step by step V3.0
python写一个通讯录step by step V3.0 更新功能: 数据库进行数据存入和读取操作 字典配合函数调用实现switch功能 其他:函数.字典.模块调用 注意问题: 1.更优美的格式化输 ...
- C#2.0实例程序STEP BY STEP--实例二:数据类型
C#2.0实例程序STEP BY STEP--实例二:数据类型 与其他.NET语言一样,C#支持Common Type Sysem(CTS),其中的数据类型集合不仅包含我们熟悉的基本类型,例如int, ...
- 文本分类step by step(二)
(注:如有转载请标明作者:finallyliuyu, 和出处:博客园) <文本分类 step by step(一)> 在<文本分类step by step(一)>中,我们从处理 ...
- 数据库设计Step by Step (9)——ER-to-SQL转化
2019独角兽企业重金招聘Python工程师标准>>> 引言:前文(数据库设计 Step by Step (8)--视图集成)讨论了如何把局部ER图集成为全局ER图.有了全局ER图后 ...
最新文章
- 命令 / Linux / 常用的解压缩的命令
- SAP UI5 binding syntax - model name + + attribute name
- ASP.NET Core loves JavaScript
- 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery )
- HDU3534 给你一个树让你找出其中最长路径以及个数数
- 数据写入mysql的方式,FMDB写入大量数据的处理方法
- 多线程程序中操作的原子性--转帖
- Hyperledger Fabric教程(1)--Hyperledger Fabric 老版本 1.1.0 快速部署安装
- android图标分组名称唯美,手机屏幕分组好听名字
- iTerm2使用zmodem协议上传下载文件
- SQL Server_SQL Server Windows NT - 64 bit
- leetcode刷题方法
- linux系统编程3—文件存储函数
- Java--JSP四大作用域、九大内置对象
- 虚拟内存与虚拟存储器的区别
- 中科院院士!南京大学,迎来新校长
- 桥牌坐庄训练bm2000 level3闯关记录——A5
- node-rsa 加减密与java rsa加减密 互调 相互加减密
- 大数据毕设选题 - 深度学习股票预测系统(python Django)
- 【星云测试】星云精准测试之用例魔方