以太坊智能合约使用教程
❶ 在线发布智能合约https://remix.ethereum.org的简单使用
Remix IDE是开发以太坊智能合约的在线IDE工具,部署简单的智能合约非常方便
Remix地址:https://remix.ethereum.org/
使用的前提是需要谷歌或者火狐的浏览器,且安装了MetaMask 插件
MetaMask 插件的安装使用可以查看这个链接https://www.jianshu.com/p/cdb9e082d059
接下来我用Remix IDE写一个简单的合约,一切开始都从Hello Word 开始。
默认会有一个Ballot 投票合约,这我我点左上角的添加功能,重新建立一个文件,文件名命名为personal.sol
这里我些一个简单的合约
solidity 的基本语法可以去这个网站实战练习(https://cryptozombies.io/zh/)这个超爽边玩。
我这里写个say()方法 和给个属性age
合约截图如下:
OK编译没问题,接下来我们在测试网上部署合约,先要确定你的MetaMask 插件是选择的测试网络(我一般选择Ropsten测试网)
此时开始部署,点击浏览器MetaMask插件 确认提交等待测试网络上的矿工处理。
部署成功后点击At Address 可以查看到合约公开的操作方法,每执行一次方法就也就是执行一次合约的事物,这是需要Gas 燃料的,没一步需要矿工处理
OK 此时我们查看一下 age的值 点击age ,可以看到age = 10,调用一下increaseAge 方法给它赋值80,此刻执行一下合约,矿工处理完后,查看一下age 变量已经为80
现在一个超简单的合约已经部署成功了,智能合约是一个很有想象空间的玩意,从简单的合约开始,熟练Solidity 语法。
❷ solidity 智能合约(3):使用truffle编译部署及测试合约
先找源码敲一遍,跑起来,后面慢慢讲怎么用solidity编写以太坊智能合约。
这个文件编写在 contracts 目录下
这个文件在 migrations 目录下
这个文件可以创建一个 test 目录,然后放进去,我这里直接放在了根目录,不太规范。
要编译Truffle项目里的合约,请切换到项目工程所在根目录,然后在终端中键入以下内容:
首次运行时,将编译所有合约。 在后续运行中,Truffle将仅编译自上次编译以来有更改的合约。如果我们想覆盖此行为,可以使用 --all 选项运行上面的命令。
编译的目标文件 Artifacts 将放在 build/contracts/ 目录中,相对于项目根目录(如果该目录不存在,将创建该目录。)
这些 Artifacts 是Truffle内部工作的组成部分,它们在成功部署应用程序中起着重要作用。 不要去编辑这些文件,因为这些文件将被合约编译和部署覆盖。
编译成功后
迁移脚本(JavaScript文件)可帮助我们将合约部署到以太坊网络。 这些文件负责暂存我们的部署任务,并且假设我们的部署需求会随着时间的推移而发生变化。 随着项目的发展,我们将创建新的迁移脚本,以进一步推动区块链的发展。 先前运行的部署记录通过特殊的 Migrations 迁移合约记录在链上,详细信息如下。
部署命令
要运行部署,请运行以下命令:
这将部署在项目的 migrations 目录中的所有迁移文件。 最简单的迁移只是一组管理部署脚本。 如果我们的迁移先前已成功运行,则 truffle migrate 将从上次运行的迁移开始执行,仅运行新创建的迁移。 如果不存在新的迁移, truffle migrate 将不会执行任何操作。 我们可以使用 --reset 选项从头开始运行所有迁移。 对于本地测试,确保在执行 migrate 之前安装并运行了 Ganache等 测试区块链。
测试脚本中输入数值 100 ,取出的数值为 64 (这个值是16进制格式,转为十进制就是 100 ).
❸ 浠ュお鍧婂備綍澶勭悊鏅鸿兘鍚堢害鐨勮嚜鐢卞害闂棰
浠ュお鍧婂備綍澶勭悊鏅鸿兘鍚堢害鐨勮嚜鐢卞害闂棰橈紵
浠ュお鍧婃槸褰撳墠鏈娴佽岀殑鍖哄潡閾句箣涓锛屽叾鏅鸿兘鍚堢害鎶鏈琚骞挎硾搴旂敤浜庡悇绉嶅満鏅銆傜劧鑰岋紝鏅鸿兘鍚堢害鐨勮嚜鐢卞害闂棰樹粛鐒舵槸涓涓鍊煎緱鍏虫敞鐨勮瘽棰樸傚湪浠ュお鍧婄敓鎬佺郴缁熶腑锛屾櫤鑳藉悎绾︾殑鎵ц岀粨鏋滃彈鍒板氭柟闈㈠洜绱犵殑褰卞搷锛屽傚悎绾︿唬鐮佺殑澶嶆潅搴︺佷氦鏄撹垂鐢ㄧ殑璁剧疆銆佸悎绾﹂棿鐨勪氦浜掔瓑绛夈傛湰鏂囧皢鎺㈣ㄤ互澶鍧婂湪澶勭悊鏅鸿兘鍚堢害鑷鐢卞害闂棰樻椂閲囧彇鐨勭瓥鐣ャ
浠ュお鍧婃櫤鑳藉悎绾︾殑鑷鐢卞害涓昏佸寘鎷浠ヤ笅涓ゆ柟闈锛
涓鏄鍚堢害鐨勭紪鍐欒嚜鐢卞害銆備互澶鍧婃敮鎸佸氱嶇紪绋嬭瑷锛屽紑鍙戣呭彲浠ュ湪涓嶅悓鐨勮瑷鍜屾嗘灦閲岃嚜鐢遍夋嫨锛岃繖寰堝ぇ绋嬪害涓婂炲己浜嗗悎绾︾殑鍙鎵╁睍鎬у拰鐏垫椿鎬с傜劧鑰岋紝杩欎篃甯︽潵浜嗗畨鍏ㄦх殑鎸戞垬銆傚洜涓轰笉鍚岀殑璇瑷鍜屾嗘灦鏈韬灏卞瓨鍦ㄦ紡娲烇紝濡傛灉鍚堢害缂栧啓鑰呮病鏈変粩缁嗚冭檻杩欎簺闂棰橈紝灏卞彲鑳藉艰嚧涓ラ噸鐨勫畨鍏ㄩ棶棰樸
浜屾槸鍚堢害鐨勬搷浣滆嚜鐢卞害銆備互澶鍧婁笂鐨勬櫤鑳藉悎绾﹀彲浠ヨ鍏朵粬鍚堢害鎴栬呭栭儴璐︽埛璋冪敤锛岃繖鎰忓懗鐫鍚堢害鐨勬墽琛岀粨鏋滀細鍙楀埌鍏朵粬鍚堢害鎴栬呰处鎴风殑褰卞搷銆傛ゅ栵紝浜ゆ槗璐圭敤銆佺綉缁滄嫢濉炵瓑鍥犵礌涔熶細瀵瑰悎绾︾殑鎵ц岀粨鏋滀骇鐢熷奖鍝嶃傝繖浜涘洜绱犵殑鑷鐢卞害寰堝ぇ绋嬪害涓婂炲姞浜嗗悎绾︾殑澶嶆潅搴︼紝鍚屾椂涔熷炲姞浜嗗悎绾︽墽琛岀殑椋庨櫓銆
涓轰簡搴斿规櫤鑳藉悎绾﹁嚜鐢卞害闂棰橈紝浠ュお鍧婇噰鍙栦簡涓绯诲垪鎺鏂姐傚叾涓鏈閲嶈佺殑涓椤规槸浠ュお鍧婅櫄鎷熸満锛圗VM锛夈侲VM鏄浠ュお鍧婁笂鐨勮櫄鎷熸満锛屾棬鍦ㄥ疄鐜板悎绾︾殑蹇閫熴佸彲闈犮佸畨鍏ㄦ墽琛屻侲VM閫氳繃瀛楄妭鐮佺殑鏂瑰紡鎵ц屾櫤鑳藉悎绾︼紝閬垮厤浜嗚瑷鍜屾嗘灦鐨勯檺鍒躲傚悓鏃讹紝EVM杩樻彁渚涗簡涓瀹氱殑鏈哄埗鏉ラ槻姝㈠悎绾︽墽琛屼腑鐨勫紓甯告儏鍐碉紝姣斿傚唴瀛樻孩鍑恒侀櫎闆剁瓑銆傝繖浜涙満鍒舵湁鍔╀簬鎺у埗鏅鸿兘鍚堢害鐨勮嚜鐢卞害锛屾彁楂樺叾鎵ц岀殑鍙闈犳у拰瀹夊叏鎬с
姝ゅ栵紝浠ュお鍧婅繕鎻愪緵浜嗕竴浜涢珮绾у姛鑳芥潵鎺у埗鏅鸿兘鍚堢害鐨勬墽琛屻傚叾涓鏈甯哥敤鐨勬槸鍚堢害鎵ц岀殑Gas闄愬埗銆傛瘡涓鏅鸿兘鍚堢害鎵ц岀殑鏈闀挎椂闂磋闄愬埗鍦ㄤ竴瀹氭暟閲忕殑Gas鍐咃紝杩欐牱鍙浠ラ伩鍏嶅悎绾︽墽琛岃繃闀挎椂闂磋屽艰嚧鍏朵粬鍚堢害鍜岃处鎴风殑绛夊緟銆傚悓鏃讹紝鍚堢害鎿嶄綔鐨凣as娑堣椾篃琚闄愬埗鍦ㄤ竴瀹氳寖鍥村唴锛岃繖鏈夊姪浜庨槻姝㈡伓鎰忓悎绾﹀崰鐢ㄥお澶氱殑璁$畻璧勬簮銆
鎬讳箣锛屾櫤鑳藉悎绾﹁嚜鐢卞害鏄浠ュお鍧婃櫤鑳藉悎绾﹂潰涓寸殑涓涓鎸戞垬锛屼絾杩欎篃鏄鍖哄潡閾炬妧鏈鍙戝睍鐨勫繀缁忎箣璺銆備互澶鍧婇氳繃EVM鍜孏as闄愬埗绛夋満鍒舵潵鎺у埗鍚堢害鐨勬墽琛岋紝鎻愰珮浜嗗悎绾︾殑鍙闈犳у拰瀹夊叏鎬э紝鍚屾椂涔熶负寮鍙戣呮彁渚涗簡鏇村氱殑鑷鐢卞害鍜岀伒娲绘с傜浉淇¢殢鐫鍖哄潡閾炬妧鏈鐨勪笉鏂鍙戝睍锛屾櫤鑳藉悎绾︾殑鑷鐢卞害闂棰樹篃灏嗗緱鍒版洿濂界殑瑙e喅銆
❹ solidity智能合约(3):使用truffle编译部署及测试合约
首先,我们将通过实际操作来演示如何使用Solidity编写以太坊智能合约,并让它们运行起来。
智能合约文件应保存在项目的`contracts`目录下。
接下来,在`migrations`目录下创建一个`test`目录,以规范地存放测试文件。如果直接在根目录下存放测试文件,虽然可以工作,但不够规范。
为了编译Truffle项目中的合约,请确保已切换到项目根目录,并在终端中输入以下命令:
首次运行此命令时,Truffle将编译项目中的所有合约。在之后的运行中,它将仅编译自上次编译以来有更改的合约。如果我们希望覆盖这一行为,可以选择使用`--all`选项重新运行上述命令。
编译完成后的目标文件`Artifacts`将存储在`build/contracts/`目录中,这是相对于项目根目录的位置(如果该目录不存在,Truffle将创建它)。
请注意,`Artifacts`文件是Truffle框架内部工作的一部分,它们在成功部署应用程序时扮演关键角色。不应编辑这些文件,因为它们将被合约编译和部署所覆盖。
合约编译成功后,接下来是迁移脚本(JavaScript文件)。这些脚本帮助我们把合约部署到以太坊网络上。它们负责存储我们的部署任务,并假设我们的部署需求会随时间变化。随着项目的发展,我们将创建新的迁移脚本来推动区块链的进一步发展。
部署合约的命令如下:
执行此命令将部署`migrations`目录中的所有迁移文件。最简单的迁移脚本只是一组管理部署的脚本。如果我们的迁移脚本之前已成功运行,`truffle migrate`将从上次运行的迁移开始执行,只部署新创建的迁移。如果没有新的迁移,`truffle migrate`将不会执行任何操作。在进行本地测试时,请确保在运行`migrate`命令之前安装并启动了Ganache等测试区块链。
最后,让我们来看一个测试脚本的例子。在测试脚本中,我们输入了数值100,合约返回的值是64(这个值是十六进制格式,转换为十进制就是100)。
❺ 以太坊的智能合约
智能合约是运行在计算机里面的,用于保证让参与方执行承诺的代码,般情况下,普通合约上记录了甲方与乙方各方面的关系条款,并通常是通过法律强制执行或保护的,而“智能合约”则是用密码或密钥来执行关系。以更加直接的角度来理解的话,即“智能合约”的程序内容将同-开始大家一起设定好的那样百分百执行,并且零差错。
举个例子,以太坊用户可以使用智能合约在特定日期向朋友发送10个以太币。在这种情况下,用户可以操作创建一个合约,然后将程序推人该合约中进行特殊计算,以便它能够执行所需的命令。而以太坊就是专门把精力集中在这件事上的这么一个平台。
比特币是第一个支持“智能契约”的资源币种,因为网络的价值在于把价值或数据从一个点或人转移到另一个点或人身上。节点网络只在满足某些条件时才会进行验证,但是,比特币仅限于货币用例。相反,以大坊取代了比特币那种带有不小限制性的编程语言,取而代之的是一种允许开发人员编写自己程序的语言。以太坊允许开发人员编写他们自己的“智能契约”,即“自主代理”或“自治代理”,正如ETH白皮书所称的那样。该编程语言是“图灵完备”语言,这意味着它支持一组更广泛的计算指令。智能合约能做些什么呢?
1.“多签名”账户功能,只有在一定比例的人同意时才能使用资金。这个功能经常用在与众筹或募捐类似的活动中。
2.管理用户之间所签订的协议。例如,一方从另一方购买保险服务3.为其他合同提供实用程序。
4.存储有关应用程序的信息,如“域注册信息”或“会员信息记录”。概念有时候比较晦涩,我们举一个募捐的智能合约的例子来帮助理解:假设我们想向全网用户发起募捐,那就可以先定义一个智能账户,它有三个状态:当前募捐总量,捐款目标和被捐赠人的地址,然后给它定义两个函数:接收募捐函数和捐款函数。
接收募捐函数每次收到发过来的转账请求,先核对下发送者是否有足够多的钱(EVM会提供发送请求者的地址,程序可以通过地址获取到该人当前的区块链财务状况),然后每次募捐丽数调用时,都会比较下当前募捐总量跟捐款目标的比较,如果超过目标,就把当前收到的捐款全部发送到指定的被捐款人地址,否则的话,就只更新当前募捐总量状态值。
捐款函数将所有捐款发送到保存的被捐赠人地址,并且将当前捐款总量清零。每一个想要募捐的人,用自己的ETH地址向该智能账户发起一笔转账,并且指明了要调用接受其募捐函数。于是我们就有一个募捐智能合约了,人们可以往里面捐款,达到限额后钱会自动发送到指定账户,全世界的矿工都在为这个合约进行计算和担保,不再需要人去盯着看有没有被挪用,这就是智能合约的魅力所在。
❻ 浜嗚В浠ュお鍧婁腑鐨 Gas 浠ュ強濡備綍浼樺寲鏅鸿兘鍚堢害
浠ュお鍧婏細鏅鸿兘鍚堢害鐨勭噧鏂欎笌浼樺寲绛栫暐
1. 寮曡█</
浠ュお鍧婏紝鍖哄潡閾惧垱鏂扮殑鐏濉旓紝鍑鍊熷叾鏅鸿兘鍚堢害鐨勫姏閲忥紝瀹炵幇浜嗚嚜鍔ㄥ寲浠诲姟鐨勬墽琛岋紝鐘瑰傝秴绾ц嫳闆勮埇瀹堟姢鐫鍘讳腑蹇冨寲鐨勬暟瀛椾笘鐣屻傚叾涓鐨勬牳蹇冨厓绱犫斺攇as锛屾槸浜ゆ槗鍏骞冲拰缃戠粶瀹夊叏鐨勪繚闅滄満鍒讹紝瀹冨湪鏅鸿兘鍚堢害鐨勮垶鍙颁笂鎵婕旂潃鑷冲叧閲嶈佺殑瑙掕壊銆
2. 鐞嗚ВGas</
鍦ㄤ互澶鍧婄殑浜ゆ槗涓锛実as灏卞儚琛楁満娓告垙涓鐨勪唬甯侊紝鏄鏈夐檺鐨勮祫婧愩傚畠鏄浜ゆ槗杩囩▼涓璁$畻鑳藉姏鐨勮閲忓崟浣嶏紝浠ETH锛圙wei鍗曚綅锛夊畾浠枫傚湪绻佸繖鐨勭綉缁滀腑锛実as闇姹傛縺澧烇紝绔炰簤璁$畻璧勬簮锛屼氦鏄撴垚鏈涔熼殢涔嬩笂娑ㄣ
3. 鏅鸿兘鍚堢害涓鐨凣as绠$悊</
鏅鸿兘鍚堢害涓鐨勬瘡涓涓鎿嶄綔锛屾棤璁烘槸璇诲彇銆佺畻鏈杩愮畻杩樻槸瀛樺偍锛岄兘鏈夊叾鐗瑰畾鐨刧as娑堣椼備氦鏄撳墠锛屽紑鍙戣呴渶瑕佸噯纭浼扮畻gas limit锛屽惁鍒欎竴鏃﹁秴鍑猴紝浜ゆ槗灏嗗洜鈥滄皵浣撲笉瓒斥濊屽け璐ワ紝灏卞儚椹鹃┒鏃舵湭棰勪及娌归噺涓鏍峰叧閿銆
4. Gas鎴愭湰浼扮畻涓庡疄璺</ 鎯宠薄gas鎴愭湰涓哄叕璺鏃呰岀殑姹芥补锛屽埄鐢‥therscan銆丮etaMask绛夊伐鍏疯繘琛屼及绠楋紝鎴栬呴氳繃web3.js鐨"estimateGas"鍑芥暟杩涜岀簿纭璁$畻銆備及绠楀彧鏄鎻愪緵涓涓澶ц嚧鐨勫弬鑰冿紝瀹為檯璐圭敤闇涔樹互褰撴椂鐨刧as浠锋牸锛岀姽濡傚ぉ姘旈勬姤锛岄渶瑕佹彁鍓嶅仛濂藉噯澶囥 5. 鏅鸿兘鍚堢害浼樺寲绉樼睄</ 鎺㈢储楂樻晥鍚堢害鐨勫ゥ绉橈紝浠ヤ笅鏄涓浜涘疄鐢ㄥ缓璁锛 鍊熷姪EthGasStation銆丟asNow绛夊伐鍏凤紝浠ュ強Remix IDE銆乀ruffle Suite绛夊垎鏋愬櫒锛岃╀紭鍖栬繃绋嬫洿涓虹簿鍑嗐 浠ユ姇绁ㄥ悎绾︿负渚嬶細
楂樻晥鎶曠エ绯荤粺</
contract Voting {
mapping(address => bool) hasVoted;
uint256 totalVotes;
function vote() public {
require(!hasVoted[msg.sender], "You've already cast your vote!");
// 绠娲佺殑鎶曠エ閫昏緫
hasVoted[msg.sender] = true;
// 浼樺寲瀛樺偍鍜岃皟鐢ㄦ搷浣
}
鎬荤粨</
娣卞叆鐞嗚Вgas鍦ㄤ互澶鍧婁腑鐨勮繍琛屾満鍒讹紝鎺屾彙鏅鸿兘鍚堢害鐨刧as鎴愭湰浼扮畻锛屾槸瀹炵幇楂樻晥浜ゆ槗鐨勫叧閿銆傞氳繃浼樺寲瀛樺偍鍜岀畻娉曪紝鍙浠ユ樉钁楅檷浣巊as娑堣楋紝纭淇濆悎绾︾殑椤虹晠杩愯屻
杩涗竴姝ユ帰绱</
- 浠ュお鍧婄櫧鐨涔 - 娣卞叆鐮旂┒鍗忚鍘熺悊
- 浠ュお鍧婇粍鐨涔 - 璇︾粏浜嗚В鎶鏈缁嗚妭
- 瀹炴椂gas浠锋牸 - 鏃跺埢鎺屾彙鎴愭湰鍔ㄦ
- Solidity鏂囨。 - 鏅鸿兘鍚堢害缂栧啓鎸囧崡
- Etherscan - 鏌ヨ浜ゆ槗淇℃伅
- Ethereum StackExchange - 瑙g瓟鐤戞儜涓庝氦娴佸績寰
❼ 以太坊的智能合约能够自动执行哪种类型的任务
以太坊智能合约可以自动执行多种类型的任务。
以下是详细的解释:
自动执行的任务类型:
1. 金融交易:以太坊智能合约可以自动处理各种金融交易,如转账、支付、兑换等。这些交易可以在满足特定条件时自动触发,例如当某个事件发生时或达到某个时间点。
2. 数据管理:智能合约可以用于自动记录和管理数据。例如,它可以跟踪供应链中的商品流动,记录医疗记录或管理数字身份信息等。只要数据满足特定条件,智能合约就会自动更新和执行相应操作。
3. 智能身份验证:智能合约可以用于身份验证和授权过程。它可以检查用户的权限和身份,并在满足特定条件时授予或拒绝访问权限。这种自动化的身份验证过程提高了安全性和效率。
4. 自动执行业务逻辑:除了上述场景,以太坊智能合约还可以根据预先定义的规则自动执行各种业务逻辑。例如,智能合约可以管理电子投票过程、执行拍卖、分配奖励等。这些逻辑的执行完全基于预设的条件和规则,无需人工干预。
以太坊的智能合约是一种基于区块链技术的自动化程序,它允许开发者创建去中心化的应用程序。这些应用程序能够基于预设的规则和条件自动执行各种任务,从而提高效率、减少人为错误并增强安全性。由于以太坊的智能合约是公开透明的,因此所有交易和记录都可以被查看和验证,进一步增强了信任度。
❽ 以太坊智能合约能关闭吗
能。
可以访问网站,然后连接上自己的钱包,就会读取钱包中已经订立了合约的Token项,然后点撤销即可。
智能合约让以太坊,去中心化应用具有无限想象力和更强大的生命力。智能合约可以处理各种业务逻辑,来充分地利用以太坊区块链的能力,使得区块链的扩展性更强,从而让以太坊发展成为目前最大的一个区块链开发平台。