【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…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...
零基础在实践中学习网络安全-皮卡丘靶场(第十一期-目录遍历模块)
经过前面几期的内容我们学习了很多网络安全的知识,而这期内容就涉及到了前面的第六期-RCE模块,第七期-File inclusion模块,第八期-Unsafe Filedownload模块。 什么是"遍历"呢:对学过一些开发语言的朋友来说应该知道&…...
Python爬虫(四):PyQuery 框架
PyQuery 框架详解与对比 BeautifulSoup 第一部分:PyQuery 框架介绍 1. PyQuery 是什么? PyQuery 是一个 Python 的 HTML/XML 解析库,它采用了 jQuery 的语法风格,让开发者能够用类似前端 jQuery 的方式处理文档解析。它的核心特…...
