ETH 开发环境搭建及智能合约 helloworld
ETH 开发环境搭建及智能合约 helloworld
自己的菜鸟级的起步教程,给自己长记性
准备
什么是以太坊
以太坊白皮书
以太坊白皮书_ZH
以太坊白皮书_EN
环境介绍
这里使用了,以下两个开发工具
- truffle
- testrpc
Truffle 是一个基于js 开发的 以太坊开发框架,其集成很多开发功能及一身, 能够在本地编译, 部署智能合约, 并且可以通过console 对节点进行 rpc 。
testrpc 严格意义上是一个节点模拟工具(调试环境), 打开本地端口后, 其数据存在内存中, 不在硬盘的数据库内(不同于 geth ,mist ) 用于测试合约很方便,
(如果在geth 上测试合约,需要自己开私链,还是方便了不少)
工具安装
truffle 安装
truffle 是node.js工程
所以先安装 node.js
安装环境后 console 执行
npm install -g truffle #可能需要权限
安装完成后执行
truffle version
回显
Truffle v4.0.5 (core: 4.0.5)
Solidity v0.4.18 (solc-js)
如上安装成功
这个框架在激烈的开发中,所以不同版本,可能出入大,(反正我是支持支持最新版!)
testrpc 安装
npm install -g ethereumjs-testrpc
也是js 开发,所以,一键安装它
执行后,回显如下
EthereumJS TestRPC v6.0.3 (ganache-core: 2.0.2)Available Accounts==================
(0) 0x819d0cce264d8c7028f079f828ec44ad50ab6f1f(1) 0xa0eb8d663514aed055c26fdfa02082f283e3814b(2) 0x083c2e3debbd83e7193d430c95cb65dfac38be2e(3) 0xa268de20bc84f2a371f46e71dd51a437fd0b2b8a(4) 0x6a183c520fac524984ff620f6962e758b0a72d3c(5) 0xe365cc8ef2ab2bc1bc4d6bbda83a8abb589239cc(6) 0x179aa33ae7918af15c956d8b2c8e784004da30e7(7) 0x596a67f06884c15ffe9c8767b698730791d6a80d(8) 0x318bb06f46a24a322a2a0a173712b630a41f8755(9) 0xe1b157fed1cbd523538ed0785bbafef2bb5b5aa5Private Keys==================
(0) 660f587668641256e4ad353e0a2df52f02524c41641ea3e55aa4ad28300f3c63(1) 1ff553362355f36b2d2c3bcef0487cbf4a0db041eeab71e00c6bfb5b43a82e67(2) bd10b1b76af76ab8a02a9299efd9ff3cafff68a6af0adf4b7e1ff83abc50b479(3) 673ee36f18ee7d58ce0ddfd78b4a584c9b2f12be4c7860d813e9e906582aba15(4) 794e336225d007e6a3fbd06a60d087fd0a0380fb04a39adbc066e765c676a105(5) c7cd161d995caf782f90ac51e86aa9acece2dbf2f95e1fa0ddd286c98dcbe6ec(6) 9058ad2690b7db693675badc61388fe563b6b35e800e02e760e8b3a681660470(7) 5b343a275911d1cb644ef55081feabc5d40fce12e1036b2f2eb3c639763e2f7a(8) fb237a23e02e29711e7050f394c09bdee3d7818ab91dfcb82501773a80b61c5a(9) f6f62f1d1ef0811a9f2c63cde211fc2a57032a4752505cee8e18caa85ff94339HD Wallet==================
Mnemonic: rose april chef waste mule setup coffee icon upper news amused lectureBase HD Path: m/44'/60'/0'/0/{account_index}Listening on localhost:8545
会自动的分配我们十个地址,用于测试, 打开8545 rpc端口
环境测试
先启动节点 testrpc
testrpc
之后启动truffle的rpc命令行
truffle console #可能会有网络问题,见后
当终端1出现
truffle(development)>
说明已经,正常接入rpc控制台
执行命令
truffle(development)> web3.eth.accounts
[ '0x819d0cce264d8c7028f079f828ec44ad50ab6f1f','0xa0eb8d663514aed055c26fdfa02082f283e3814b','0x083c2e3debbd83e7193d430c95cb65dfac38be2e','0xa268de20bc84f2a371f46e71dd51a437fd0b2b8a','0x6a183c520fac524984ff620f6962e758b0a72d3c','0xe365cc8ef2ab2bc1bc4d6bbda83a8abb589239cc','0x179aa33ae7918af15c956d8b2c8e784004da30e7','0x596a67f06884c15ffe9c8767b698730791d6a80d','0x318bb06f46a24a322a2a0a173712b630a41f8755','0xe1b157fed1cbd523538ed0785bbafef2bb5b5aa5' ]
回显恰好是分配我们的测试地址
余额查询
ruffle(development)> web3.eth.getBalance(web3.eth.accounts[0])
BigNumber { s: 1, e: 20, c: [ 1000000 ] }
(好像js 对大数支持不好???)
Q&A
因为这个版本迭代太快,所以发现网上有些教程,存在各种报错
所以算是自己慢慢摸索考证,解决了部分问题
Q: 运行truffle console 时 报错,说是网络有问题相关Error: No network specified. Cannot determine current network.A: 修改目录下的truffle.js的内容 用于指定RPC的地址module.exports = {networks: {development: {host: "localhost",port: 8545,network_id: "*"}}};
至此环境搭建完毕
开始
上面算是搭建好了开发的环境
下面开始写一个hello world的智能合约
什么是智能合约
其实在我的理解上 EVM 以太坊虚拟机,就是我们允许智能合约的平台, 我们使用solidity 编写的合约,然后,经过编译器,将其编译成字节码(op) , (真的神奇), 当部署,和使用合约之后,就会被执行
就是一个函数,签订合同的就可以使用(估计错误)
这样援引一段话
智能合约只是一些运行在电脑(或其他节点)的区块链加密货币网络的特定代码,一旦节点执行了这个代码,合约就会更新总账(ledger)。所以如果你们熟悉我的话,我喜欢在一些已经存在的概念上(notion),做一些类比和抽象上的尝试。实际上这可以构建的知识结构,比如模式(schema)。
什么是智能合约
这里是部分EOS(基于eth的去中心操作系统的部分合约代码)
contract DSAuthority {
function canCall(address src, address dst, bytes4 sig) constant returns (bool);
}contract DSAuthEvents {event LogSetAuthority (address indexed authority);event LogSetOwner (address indexed owner);
}
下面是部分的evm机器码(汇编!!!)
PUSH1 0x60
PUSH1 0x40
MSTORE
CALLDATASIZE
ISZERO
PUSH2 0x011b
JUMPI
这里是的EOS合约内容
合约部署
工程模板
truffle 很方便的给我们提供了,便捷的工程模板的搭建
建立目录hello 执行
truffle init
等待片刻
Downloading...
Unpacking...
Setting up...
Unbox successful. Sweet!Commands:Compile: truffle compileMigrate: truffle migrateTest contracts: truffle test
以上回显 表示模板建立OK 目录结构
hello
├── contracts
│ └── Migrations.sol
├── migrations
│ └── 1_initial_migration.js
├── test
├── truffle-config.js
└── truffle.js3 directories, 4 files
模板初始化完毕
合约编译
solidity是编写合约的语言,和js相似(奈何没学过),所以从度娘那里抄了一个helloworld
pragma solidity ^0.4.4;contract hello {function sayHello() returns (string) {return ("Hello World");}
}
contract {} 说明是合约, 定义函数,说明返回值类型,函数体返回字符串,所以最后应该会显示该字符串(应该吧)
保存为hello.sol ,保存在contract 目录下
(模板本身自带一个合约,可以删除,可以不动,没影响)
执行 完成编译
truffle compile
Compiling ./contracts/Migrations.sol...
Compiling ./contracts/hello.sol...Compilation warnings encountered:/Users/r4y/Misc/tmmp/contracts/hello.sol:4:6: Warning: No visibility specified. Defaulting to "public".function sayHello() returns (string) {^
Spanning multiple lines.
,/Users/r4y/Misc/tmmp/contracts/hello.sol:4:6: Warning: Function state mutability can be restricted to purefunction sayHello() returns (string) {^
Spanning multiple lines.Writing artifacts to ./build/contracts
警告先忽略, 编译内容在我们的 build/contract 下的json文件中
合约部署
修改部署脚本 igrations/1_initial_migration.js
ar Migrations = artifacts.require("./hello.sol");module.exports = function(deployer) {deployer.deploy(Migrations);
};
部署合约前先要启动节点
执行 以进行合约部署
truffle migrate --reset #出现网络问题,要注意网络部署 见前
注意 : 当增加或者删除了某个合约后,可以执行“truffle migrate –reset”命令重新部署合约。
终端回显
Running migration: 1_initial_migration.jsDeploying hello...... 0xf4f68259d28b84c26ce9bdfb5b246c40441f2733b7810d555fbcdeda24249b6ehello: 0x84c33260f8085d2b236184734072755cd661dceb
Saving artifacts...
同时 节点终端dbg
有我们的TX gas
Transaction: 0xf4f68259d28b84c26ce9bdfb5b246c40441f2733b7810d555fbcdeda24249b6eContract created: 0x84c33260f8085d2b236184734072755cd661dcebGas usage: 142468Block Number: 1Block Time: Thu Jan 25 2118 xx:xx:21 GMT+0x00 (CST)
合约部署完毕
合约执行
truffle consloe #进入rpc 命令行ruffle(development)> var contract
undefined
truffle(development)> hello.deployed().then(instance => contract = instance)
......
truffle(development)> contract.sayHello.call()
'Hello World'
至此HELLOworld 总算是hel出来了
常见问题
Q&A
ETH 开发环境搭建及智能合约 helloworld相关推荐
- Windows下Python开发环境搭建及 Python的HelloWorld示例
最近较忙,都么时间更新博客了.本文介绍Windows下Python开发环境的搭建. 一.从链接http://www.python.org/downloads/ 下载安装包,注意32位和64位安装包区别 ...
- xuperchain环境搭建及智能合约应用
Go语言环境搭建 sudo apt install git 下载安装go的安装包 以go1.19.1.linux-amd64为例 git clone https://studygolang.com/d ...
- 智能合约开发环境搭建及Hello World合约
如果你对于以太坊智能合约开发还没有概念(本文会假设你已经知道这些概念),建议先阅读入门篇. 就先学习任何编程语言一样,入门的第一个程序都是Hello World.今天我们来一步一步从搭建以太坊智能合约 ...
- 智能合约开发环境搭建及 Hello World 合约
智能合约开发环境搭建及 Hello World 合约 如果你对于以太坊智能合约开发还没有概念(本文会假设你已经知道这些概念),建议先阅读入门篇. 就先学习任何编程语言一样,入门的第一个程序都是 Hel ...
- EOS智能合约开发-开发环境搭建
我们先尽量简单直白的说下什么是EOS链,资源,智能合约,以及之间的关系. EOS链 我们可以把EOS链想成一个由多台服务器组成的一个计算机云集群{无意突出此链的中心化}.每台服务器(节点)上都部署着一 ...
- 【Android基础笔记01】Android开发环境搭建和HelloWorld
最近手头项目3.0版本要上线了, 没有那么多工作压力了, 抽空看了看之前在云笔记上做的笔记 都是一些基础知识 给大家分享出来吧 一.什么是Android?[了解 ] Android(中文俗称安卓)是一 ...
- ESP8266在Alios-Things上的入门开发指南 (一)开发环境搭建及HelloWorld固件
一. 开发环境搭建 目前国内大多数开发者使用的都是WinXP/Win7/Windows XX做MCU的开发.习惯Windows环境开发的朋友,如果一旦一接触到MCU需要是Linux环境来进行开发 ...
- windows驱动开发环境搭建以及helloworld
文章目录 前言 编译环境-WDK的安装 搭建测试驱动的虚拟机 win11虚拟机 win10虚拟机 在测试机器上运行驱动 修改注册表-显示调试信息 上面驱动代码含义 测试证书签名 其他 旧版本的visu ...
- Android 攻城狮的进击 1 开发环境搭建HelloWorld.apk
总览: Java简介 Java相关常识 Android简介 Android相关常识 开发环境搭建 HelloWorld.apk 参考文 ...
最新文章
- linux svn missingargument -m,缺少參數-m在windows powershell中使用svn。
- VMware的“桥接”、“NAT”、“Host-only”上网方式的区别
- 程序员学习网站备份(小众+不定时更新ing...)建议收藏
- 13.5.虚拟化工具--jhat详解、13.6.虚拟化工具--jstack详解
- ffmpeg中av_strlcpy替换了pstrcpy
- Wireshark 命令行捕获数据
- Pyechart:30分钟学会pyecharts数据可视化
- 3、jeecg 笔记之 模糊查询
- TensorFlow2.0:常用数据范围压缩函数
- 华为java开发面试难不难,秀出天际!
- 区块链扫盲 | 认知升级,虚拟货币骗子是什么样子的?
- MTK平台CAMERA驱动框架解析
- PowerPoint 在播放时自动运行宏
- 《穹顶之下》全文整理
- python圣斗士修炼(十八):访问mysql数据库
- 大数定律与蒙特卡罗法
- 夏天CPU温度过高原因及解决办法
- 【学习笔记】语义分割综述
- 简单服务端和客户端的开发
- php生成sn码,PHP 生成SN码
热门文章
- 浏览器接收响应数据过大_DOM总结:数据通信(HTTP协议和Ajax)
- 我的世界进服务器显示C1.8-1.11,【插件】 LibsDisguises —— 让你的玩家变成生物或者其他 [1.8-1.11]...
- Google2012.9.24校园招聘会笔试题
- 用指向指针方法对N个字符串进行排序并输出
- python之路-双下方法
- Android中的APinner2
- SQL查询语句执行速度快,存储过程执行慢
- oracle中简单查询语句的格式及执行顺序分析
- .Net 应用框架设计系列(二)
- SendMail与Postfix的架构备忘2