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/

扫描二维码关注公众号,回复: 14794964 查看本文章

安装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

使用说明

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

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

这样deploy后才能成功

solidity代码

// 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.name
    pair.liquidity = 0
    pair.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/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/

猜你喜欢

转载自blog.csdn.net/linzhiji/article/details/128807211