【p2p、分布式,区块链笔记 Blockchain】truffle001 以太坊开发框架truffle初步实践
以下是通过truffle框架将智能合约部署到Ganache的步骤
- Truffle简介
- 环境准备:
- 智能合约 编写 & 编译
- 部署合约
- 本地服务器ganache配置
- 网络配置
- 部署合约:
- 运行Truffle迁移(部署):
- 与智能合约交互:
- 以下是通过truffle框架将智能合约部署到Ganache的步骤。
Truffle简介
- Truffle是一个开发框架,用于编写、编译、测试和部署智能合约。
- 官方文档:https://learnblockchain.cn/docs/truffle/quickstart.html
环境准备:
npm install -g truffle
// 安装Truffletruffle init
// 初始化Truffle项目 : 创建没有合约的空工程(三个空文件夹和一个配置文件) 初始化Truffle项目后会生成以下文件内容:
目录/文件 | 描述 |
---|---|
contracts/ | Solidity合约目录 |
migrations/ | 部署脚本文件目录 |
test/ | 测试脚本目录,参考 如何测试合约于应用? |
truffle-config.js | Truffle 配置文件 |
智能合约 编写 & 编译
-
在
contracts/
目录下创建一个新的合约文件MyContract.sol
。以下是一个简单的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项目目录中,运行以下命令编译合约:
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网络配置:module.exports = {networks: {development: { // The `development` name is special - truffle uses it by defaulthost: "127.0.0.1", // Ganache的默认主机port: 7545, // Ganache的默认端口network_id: "*", // 匹配任何网络ID}},compilers: {solc: {version: "0.8.0", // 确保Solidity版本与合约一致}} };
部署合约:
-
在
migrations/
目录中创建一个新的部署脚本1_deploy_contracts.js
:const MyContract = artifacts.require("MyContract");module.exports = function(deployer) {deployer.deploy(MyContract, "Hello, Ganache!"); // 传递合约构造函数的参数 };
-
请注意,文件名以数字为前缀,后缀为描述。 编号前缀是必需的,以便记录迁移是否成功运行。 后缀纯粹是为了人类的可读性和理解力。
运行Truffle迁移(部署):
- 运行以下命令,将智能合约部署到本地的Ganache:
truffle migrate
- 如果成功,将在终端看到合约的部署地址和交易哈希:
➜ workspace git:(main) ✗ truffle migrateCompiling 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 ETHSummary
=======
> 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) 0xdc0cffd4ebbcc4a94fced27f8a434bab5f788b72da49ac6e1f5742e2e8170bf7HD 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
==================
20000000000Gas Limit
==================
6721975Call Gas Limit
==================
9007199254740991Listening on 127.0.0.1:8545
eth_blockNumber
net_version
…………
eth_gasPrice
eth_sendTransactionTransaction: 0xe988ba8520d9615713e7f1789df1cb072b63219f95ec7adbc1c278aac603ad82Contract created: 0x4df552fc25a888fc7f792336cd730b9557093828Gas usage: 365806Block Number: 1Block Time: Fri Oct 18 2024 12:32:15 GMT+0000 (Coordinated Universal Time)eth_getTransactionReceipt
eth_getCode
eth_getTransactionByHash
eth_getBlockByNumber
eth_getBalance
与智能合约交互:
-
部署完成后,可以使用Truffle控制台与智能合约交互:
truffle console
在控制台中,运行以下命令与已部署的智能合约进行交互:
// 获取部署的合约实例 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: 0xca9657eb639ba2ebd29f9e887d5e08ecc3d9c89c8dadf5333dc33b61eb97cfd8Gas usage: 29576Block Number: 2Block Time: Fri Oct 18 2024 12:37:49 GMT+0000 (Coordinated Universal Time)
相关文章:

【p2p、分布式,区块链笔记 Blockchain】truffle001 以太坊开发框架truffle初步实践
以下是通过truffle框架将智能合约部署到Ganache的步骤 Truffle简介环境准备:智能合约 编写 & 编译部署合约本地服务器ganache配置网络配置部署合约: 运行Truffle迁移(部署):与智能合约交互: 以下是通过truffle框架将智能合约部署到Ganach…...

网站被浏览器提示“不安全”,如何快速解决
当网站被浏览器提示“不安全”时,这通常意味着网站存在某些安全隐患,需要立即采取措施进行解决。 一、具体原因如下: 1.如果网站使用的是HTTP协议,应立即升级HTTPS。HTTPS通过使用SSL证书加密来保护数据传输,提高了网…...
java -jar启动 报错: Error: Unable to access jarfile
是JDK版本不对,即运行项目所需JDK与本机所装JDK版本不同 解决方法: 修改JDK版本即可。 jarfile 其后的路径不对 解决方法 修改正确的路径 将绝对路径修改为相对路径或者将相对路径修改为绝对路径,尝试一下...

Servlet(三)-------Cookie和session
一.Cookie和Session Cookie和Session都是用于在Web应用中跟踪用户状态的技术。Cookie是存储在用户浏览器中的小文本文件,由服务器发送给浏览器。当用户再次访问同一网站时,浏览器会把Cookie信息发送回服务器。例如,网站可以利用Cookie记住用…...

最新物流行业CRM系统应用数字化解决方案
因势利导 ——全球化物流的挑战与机遇 在全球经济一体化与互联网技术快速发展的双重驱动下,物流行业正经历着前所未有的变革时期。这一变革不仅影响 着行业的发展模式,还对运营效率和客户体验提出了新的要求。 随着市场需求的不断演变,物流行业已呈现出多元化和专业 化并行的发…...
[deadlock]死锁导致的设备登录无响应问题
[deadlock]死锁导致的设备登录无响应问题 一、问题现象二、初步观察三、继续深挖查看netlink相关信息查看warnd进程栈 四、再接再厉查看warnd 用户栈 后记 一、问题现象 实验室一台压力测试设备突然无法登录,无论web页面,ssh或者telnet登录,…...

2024年10月21日计算机网络,乌蒙第一部分
【互联网数据传输原理 |OSI七层网络参考模型】 https://www.bilibili.com/video/BV1EU4y1v7ju/?share_sourcecopy_web&vd_source476fcb3b552dae37b7e82015a682a972 mac地址相当于是名字,ip地址相当于是住址,端口相当于是发送的东西拿什…...
ESlint代码规范
这里写目录标题 ESlint代码规范解决代码规范错误 ESlint代码规范 代码规范:一套写代码的约定规则。例如:“赋值符号左右是否需要空格” “一行代码结束是否要加分号” JavaScript Standard Style规范说明:https://standardjs.com/rules-zhc…...

【Vue.js设计与实现】第三篇第11章:渲染器-快速 Diff 算法-阅读笔记
文章目录 11.1 相同的前置元素和后置元素11.2 判断是否需要进行 DOM 移动操作11.3 如何移动元素11.4 总结 系列目录:【Vue.js设计与实现】阅读笔记目录 非常快的Diff算法。 11.1 相同的前置元素和后置元素 不同于简单 Diff 算法和双端 Diff 算法,…...

材质变体 PSO学习笔记
学习笔记 参考各路知乎大佬文章 首先是对变体的基本认知 概括就是变体是指根据引擎中上层编写(UnityShaderLab/UE连连看)中的各种defines情况,根据不同平台编译成的底层shader,OpenGL-glsl/DX(9-11)-dxbc DX12-dxil/Vulkan-spirv,是打到游…...

2024年【烟花爆竹储存】考试及烟花爆竹储存复审模拟考试
题库来源:安全生产模拟考试一点通公众号小程序 烟花爆竹储存考试参考答案及烟花爆竹储存考试试题解析是安全生产模拟考试一点通题库老师及烟花爆竹储存操作证已考过的学员汇总,相对有效帮助烟花爆竹储存复审模拟考试学员顺利通过考试。 1、【单选题】( …...
文件夹操作
文件夹操作 opendir closedir readdir write(fd,buf,strlen(buf)); return 0; } 作用 : 打开目录 opendir 所有头文件 : #include <sys/types.h> #include <dirent.h> 函数 : DIR *opendir(const char *name); 参数: name :目…...

如何制作一台自己想要的无人机?无人机改装调试技术详解
制作一台符合个人需求的无人机并对其进行改装调试,是一个既具挑战性又充满乐趣的过程。以下是从设计、选购材料、组装、调试到改装的详细步骤: 一、明确需求与设计 1. 明确用途与性能要求: 确定无人机的使用目的,如航拍、比赛、…...

Linux -- 进程间通信、初识匿名管道
目录 进程间通信 什么是进程间通信 进程间通信的一般规律 前言: 管道 代码预准备: 如何创建管道 -- pipe 函数 参数: 返回值: wait 函数 参数: 验证管道的运行: 源文件 test.c : m…...

网站的SSL证书快到期了怎么办?怎么续签?
网站的SSL证书即将到期时,需要续签一个新的证书以保持网站的安全性和信任度。以下是续签SSL证书的一般步骤: 1. 选择证书提供商 如果您之前使用的是免费证书,您可以选择继续使用同一提供商的免费证书服务进行续签。如果您需要更高级别的证书…...
解決爬蟲代理連接的方法
爬蟲在運行過程中常常會遇到代理連接的問題,這可能導致數據抓取的效率降低甚至失敗。 常見的代理連接問題 代理IP失效:這是最常見的問題之一。有些代理IP可能在使用一段時間後失效,導致連接失敗。 連接超時:由於網路不穩定或代…...

Prometheus 监控Harbor
你好!今天分享的是基于Prometheus监控harbor服务。 在之前的文章中分别介绍了harbor基于离线安装的高可用汲取设计和部署。那么,如果我们的harbor服务主机或者harbor服务及组件出现异常,我们该如何快速处理呢? Harbor v2.2及以上…...

SQL 干货 | SQL 半连接
大多数数据库开发人员和管理员都熟悉标准的内、外、左和右连接类型。虽然可以使用 ANSI SQL 编写这些连接类型,但还有一些连接类型是基于关系代数运算符的,在 SQL 中没有语法表示。今天我们将学习一种这样的连接类型:半连接(Semi …...
洛谷 P1226:【模板】快速幂
【题目来源】https://www.luogu.com.cn/problem/P1226【题目描述】 给你三个整数 a,b,p,求 a^b mod p。【输入格式】 输入只有一行三个整数,分别代表 a,b,p。【输出格式】 输出一行一个字符串 a^b mod ps&a…...
nginx常规操作
Linux下查找Nginx配置文件位置 1、查看Nginx进程 ps -aux | grep nginx 圈出的就是Nginx的二进制文件 2、测试Nginx配置文件 /usr/sbin/nginx -t 可以看到nginx配置文件位置 3、nginx的使用(启动、重启、关闭) 首先利用配置文件启动nginx。 nginx -c /usr/local/nginx/conf…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...

Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...

PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...

华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...