区块链编译和部署(测试链网络)

区块链编译和部署(测试链网络)

1.这里推荐以太坊的holesky测试网和polygon的amoy测试网

下面就以以太坊的holesky为例

1.安装必备插件

  1. 在浏览器(尽量使用谷歌浏览器)的扩展程序中搜索MetaMask(钱包),并注册账户,你会有一个钱包地址和助记词(私钥)

  2. truffle下载

npm install -g truffle
truffle version

2.在MetaMask中添加测试网络

左上角选择网络,点添加网络或者自定义网络

按照以下进行填写

//网络名称:Holesky Test Network //这个可以自己定义

//新的 RPC URL:https://rpc.holesky.ethpandaops.io/

//链 ID : 17000

//区块浏览器 URL:https://holesky.etherscan.io/

添加完之后保存即可,切换到刚刚添加的网络

https://cloud.google.com/application/web3/faucet/ethereum/holesky

进入上面的网站领取测试币,每天可以领取一次,不过没必要

3.找一个合适的区块链平台

1.推荐使用alchemy,infura,chainstack和QuickNode

登录之后在平台中创建自己的项目
在这里插入图片描述

选择自己的网络,网址后面是自己的密钥,直接复制即可

https://eth-holesky.g.alchemy.com/v2/your_API密钥

2.然后在truffle项目中进行配置

  1. 需要先在truffle项目的目录下下载hdwallet-provider包
npm init -y

npm install @truffle/hdwallet-provider

  1. 配置truffle-config.js
// truffle-config.js

const HDWalletProvider = require('@truffle/hdwallet-provider');

const mnemonic = "这里填写钱包的助记词";

module.exports = {
  networks: {
    holesky: {
      provider: () => new HDWalletProvider(
        mnemonic,
        `https://eth-holesky.g.alchemy.com/v2/your_API密钥`
      ),
      network_id: "*",  // holesky的链Id是17000,设置*表示适配所有的链
      confirmations: 2,
      timeoutBlocks: 200,
      skipDryRun: true,
      timeoutBlocks: 200,  // 等待区块确认的超时时间
      networkCheckTimeout: 1000000000,  // 网络检查的超时时间
    }
  },
  compilers: {
    solc: {
      version: "0.8.20"
    }
  }
};

  1. 智能合约(举例)

    /contracts 这个是存智能合约的目录

    合约的命名以.sol结尾即可,前面可根据自身情况来定义,迁移文件只认编译生成的文件名

    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.0;
    
    import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
    
    // MintToken 就是编译后生成的json文件的文件名
    contract MintToken is ERC20 {
        address public minter;
    
        event MinterChanged(address indexed from, address to);
    
        constructor() ERC20("AToken", "ATK") {
            minter = msg.sender;
        }
    
        function mintTokens(address to, uint256 amount) external {
            require(msg.sender == minter, "Only minter can mint tokens");
            _mint(to, amount);
        }
    
        function changeMinter(address newMinter) external {
            require(msg.sender == minter, "Only current minter can change minter");
            emit MinterChanged(minter, newMinter);
            minter = newMinter;
        }
    }
    
    
  2. 编辑迁移文件

迁移文件在 /migrations 中创建,命名规则是必须以数字开头,我这里命名为2_deploy_mint.js

//2_deploy_mint.js

const MintToken = artifacts.require("MintToken");
// 上面的这个MintToken是编译后生成的文件名,也是上一步智能合约中contract MintToken is ERC20中的 MintToken,需要把下面的也改成这个
module.exports = async function (deployer) {
    // 设置重试次数和延迟时间
    const maxRetries = 5;
    const delay = 15000;

    // 部署 BToken 合约
    for (let attempt = 1; attempt <= maxRetries; attempt++) {
        try {
            console.log(`Attempt ${attempt} to deploy MintToken`);
            await deployer.deploy(MintToken);  //这个必须要跟上面一致
            console.log(`Successfully deployed MintToken on attempt ${attempt}`);
            break; // 如果部署成功,跳出循环
        } catch (error) {
            console.error(`Attempt ${attempt} failed: ${error.message}`);
            if (attempt < maxRetries) {
                console.log(`Waiting for ${delay / 1000} seconds before retrying...`);
                await new Promise(resolve => setTimeout(resolve, delay));
            } else {
                console.error('Max retries reached. Deployment failed.');
                throw error; // 达到最大重试次数后抛出错误
            }
        }
    }
};

完成上面的操作后,在truffle项目目录下的命令行中输入

truffle compile                     //编译生成build目录和json文件
truffle migrate --network holesky   //  编译并部署到区块链网络上

在这里插入图片描述

出现contract address才算成功

4.在代码中具体实现(以go为例)

生成的json文件中会有一个abi文件,在/build中找到与自己合约同名的json文件
在这里插入图片描述

复制到自己的代码项目库中
在这里插入图片描述

	// 读取合约ABI
	abiData, err := ioutil.ReadFile("utils/solidity/MintToken.abi")
	if err != nil {
		return fmt.Errorf("failed to read ABI file: %w", err)
	}

	// 解析ABI
	parsedABI, err := abi.JSON(bytes.NewReader(abiData))
	if err != nil {
		return fmt.Errorf("failed to parse ABI: %w", err)
	}



通过上面的命令解析abi中的函数,后续可以直接调用函数

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值