【p2p、分布式,区块链笔记 Blockchain】truffle001 以太坊开发框架truffle初步实践

以下是通过truffle框架将智能合约部署到Ganache的步骤

Truffle简介

环境准备:

  • npm install -g truffle // 安装Truffle
  • truffle init // 初始化Truffle项目 : 创建没有合约的空工程(三个空文件夹和一个配置文件) 初始化Truffle项目后会生成以下文件内容:
目录/文件 描述
contracts/ Solidity合约目录
migrations/ 部署脚本文件目录
test/ 测试脚本目录,参考 如何测试合约于应用?
truffle-config.js Truffle 配置文件

智能合约 编写 & 编译

  • 在contracts/目录下创建一个新的合约文件MyContract.sol。以下是一个简单的Solidity合约示例:

    solidity 复制代码
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.0;
    
    contract MyContract {
        string public message;
    
        constructor(string memory _message) {
            message = _message;
        }
    
        function setMessage(string memory _newMessage) public {
            message = _newMessage;
        }
    
        function getMessage() public view returns (string memory) {
            return message;
        }
    }
  • 在Truffle项目目录中,运行以下命令编译合约:

    bash 复制代码
    truffle compile --all
  • 编译后,会在build/目录中生成合约的ABI和字节码。

部署合约

本地服务器ganache配置

ganache 是一个区块链模拟器,用于在本地快速启动一个区块链网络,方便进行以太坊智能合约的开发、测试和调试。以下是 ganache 的安装和配置步骤:

  • 安装&配置ganache-ui :
    • 从Ganache官网下载安装。
    • 启动Ganache,选择"Quickstart"或"New Workspace",这会启动一个本地以太坊区块链。
  • 安装&配置ganache-cli :
    • ganache-cli使用 ethereumjs 来模拟完整的客户端行为,使开发 Ethereum 应用程序更快、更轻松、更安全: npm install -g ganache-cli

    • 安装完成后,可以通过ganache-cli命令启动。运行后,ganache-cli 会启动一个本地的以太坊区块链网络,默认监听 127.0.0.1:8545。它会自动生成一组测试账户,并输出账户地址、私钥和初始余额。

网络配置
  • 编辑truffle-config.js文件,在module.exports里添加一个Ganache网络配置:

    javascript 复制代码
    module.exports = {
      networks: {
        development: { //  The `development` name is special - truffle uses it by default
          host: "127.0.0.1",     // Ganache的默认主机
          port: 7545,            // Ganache的默认端口
          network_id: "*",       // 匹配任何网络ID
        }
      },
      compilers: {
        solc: {
          version: "0.8.0",      // 确保Solidity版本与合约一致
        }
      }
    };
部署合约:

运行Truffle迁移(部署):

  • 运行以下命令,将智能合约部署到本地的Ganache:
bash 复制代码
truffle migrate
  • 如果成功,将在终端看到合约的部署地址和交易哈希:

    ➜ workspace git:(main) ✗ truffle migrate

    Compiling your contracts...

    Everything is up to date, there is nothing to compile.

    Starting migrations...

    Network name: 'development'
    Network id: 1729253904535
    Block gas limit: 6721975 (0x6691b7)

    1_deploy_contracts.js

    复制代码
     Deploying 'MyContract'
     ----------------------
     > transaction hash:    0xe988ba8520d9615713e7f1789df1cb072b63219f95ec7adbc1c278aac603ad82
     > Blocks: 0            Seconds: 0
     > contract address:    0x4Df552fC25A888fC7F792336cD730b9557093828
     > block number:        1
     > block timestamp:     1729254735
     > account:             0x12D5297B2BC267c2744f0feD9CdE75517ae9e8E9
     > balance:             99.99268388
     > gas used:            365806 (0x594ee)
     > gas price:           20 gwei
     > value sent:          0 ETH
     > total cost:          0.00731612 ETH
    
     > Saving artifacts
     -------------------------------------
     > Total cost:          0.00731612 ETH

    Summary

    Total deployments: 1
    Final cost: 0.00731612 ETH

  • 相应的ganache-cli窗口输出:

    ➜ workspace git:(main) ✗ ganache-cli
    Ganache CLI v6.12.2 (ganache-core: 2.13.2)

    Available Accounts

    (0) 0x12D5297B2BC267c2744f0feD9CdE75517ae9e8E9 (100 ETH)
    (1) 0xA93b4B4f9f40527b5D86eF3621Ab4fb55BE281E8 (100 ETH)
    (2) 0xE7DdbEC43D86aE23056cF5581d7D120b41D93248 (100 ETH)
    (3) 0x44BCF5058eB95eD5adD4E248AcfF6A1aea5a2519 (100 ETH)
    (4) 0x547184E5C9aC0348Deb933c590C6Cb78aB9cecFf (100 ETH)
    (5) 0xd4C82Ae01f95b7B12d92E7a8B47478CBAE77C562 (100 ETH)
    (6) 0x44B75857234B696B8cea72F3c427683fF5323f12 (100 ETH)
    (7) 0x8c2eF5456E31B2b1459716165CB605327B334882 (100 ETH)
    (8) 0x4b0FD868C085d6B9b7A8B62298B4bCFb7f3769a1 (100 ETH)
    (9) 0xe46A1b806103A60d92404A09c61617273b8e6dEa (100 ETH)

    Private Keys

    (0) 0x07327b119a204389d69a02b9136705b1067f5d968b22878d8f41f23733ff62ca
    (1) 0xfc069a75ff3a18a08f4fafe442e276d0de4c157ea10c8d3b2f17211bb5c94a8a
    (2) 0x8e20cfa72180812c0079e79e750344108449e4f1365d835ab59893a2ed22edea
    (3) 0xac77c1975b2ae054c912e62cdf029801c19c4d628bc81b1136d6269d83b553f0
    (4) 0x43655a225f3da0ff9fb80012d3997d2a6b99f5b04f5e5d0147f735503e09e7e2
    (5) 0xa15f7b04deee6a1c6b2f42786096db257ce0c98a51dc818255f2cd126736e528
    (6) 0x3337be6e13fc27d0bbd6c208e6a25b4fc1d57d1df789c3033c042e0302dbeb2a
    (7) 0x7ae3ab9e4ca935eef800d4e4875014ad2194e3ba1f74c95fad16c308cac5a6aa
    (8) 0xad3b9f7c0f29e8d5955de28aa66bb7374d730fac521e9bd308838c955876a4e2
    (9) 0xdc0cffd4ebbcc4a94fced27f8a434bab5f788b72da49ac6e1f5742e2e8170bf7

    HD Wallet

    Mnemonic: blade tree catalog abuse curve woman round jewel hard civil antenna load
    Base HD Path: m/44'/60'/0'/0/{account_index}

    Gas Price

    20000000000

    Gas Limit

    6721975

    Call Gas Limit

    9007199254740991

    Listening on 127.0.0.1:8545
    eth_blockNumber
    net_version
    ............
    eth_gasPrice
    eth_sendTransaction

    复制代码
    Transaction: 0xe988ba8520d9615713e7f1789df1cb072b63219f95ec7adbc1c278aac603ad82
    Contract created: 0x4df552fc25a888fc7f792336cd730b9557093828
    Gas usage: 365806
    Block Number: 1
    Block Time: Fri Oct 18 2024 12:32:15 GMT+0000 (Coordinated Universal Time)

    eth_getTransactionReceipt
    eth_getCode
    eth_getTransactionByHash
    eth_getBlockByNumber
    eth_getBalance

与智能合约交互:

  • 部署完成后,可以使用Truffle控制台与智能合约交互:

    bash 复制代码
    truffle console

    在控制台中,运行以下命令与已部署的智能合约进行交互:

    javascript 复制代码
    // 获取部署的合约实例
    let instance = await MyContract.deployed();
    
    // 调用getMessage()函数
    let message = await instance.getMessage();
    console.log(message);  // 输出:Hello, Ganache!
    
    // 调用setMessage()函数
    await instance.setMessage("New message on Ganache");
    
    // 再次调用getMessage()函数
    message = await instance.getMessage();
    console.log(message);  // 输出:New message on Ganache
  • 相应的ganache-cli窗口输出:

    Transaction: 0xca9657eb639ba2ebd29f9e887d5e08ecc3d9c89c8dadf5333dc33b61eb97cfd8
    Gas usage: 29576
    Block Number: 2
    Block Time: Fri Oct 18 2024 12:37:49 GMT+0000 (Coordinated Universal Time)

相关推荐
yi0112 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
志尊宝3 小时前
Vue3 零基础每日笔记(073):keep-alive 页面缓存实战——列表页返回不丢状态
vue.js·笔记·缓存·#vue #前端 #前端开发·#javascript·#vue.js
weixin_448119945 小时前
Datawhale Easy Data × AI:笔记1 已重做,看新的笔记
笔记
要开心吖ZSH5 小时前
MySQL 慢 SQL 排查操作手册-个人笔记版
java·笔记·sql·mysql·慢查询
梦帮科技5 小时前
【3.0修订版】跨链中继与事件编排:Relayer 监听、多签验证与故障自愈
web安全·金融·区块链·密码学·智能合约·安全架构·信任链
咖啡忍者6 小时前
【SAP】程制造生产计划PP-PI(Production Planning for Process Industries)
笔记
ZDGJ60997 小时前
如何判断国际期货交易品种的流动性
区块链
Titan20247 小时前
MySQL索引学习笔记
笔记·学习·mysql
zhangrelay8 小时前
Arduino-MEGA-ESP单片机理论课笔记02-硬件-2026
笔记·单片机·嵌入式硬件
AOI小白新手上路8 小时前
VDMamba·AutoDL 复现笔记 · 学习笔记
笔记·学习