以太坊智能合约

        上一章,我们讲了什么是智能合约,这一章,我们结合以太坊来讲讲和更详细的学习智能合约。

一.账户

        以太坊的核心操作对象就是账户。账户又分为两类:外部所有账户和合约账户。

        外部所有账户可能也被简称为“账户”,可以这么理解:外部账户与其他区块链电子货币的账户(如比特币)一样,即外部账户具有如下功能和特性:

        1.人为创建的

        2.存取货币

        3.是公钥加密系统加密和产生的账户

        4.以太坊上的外部账户还具有创建合约账户和部署合约的能力

        因此,外部所有账户和合约账户,我们都认为是一个状态对象,这些状态主要体现为余额状态等,合约账户除拥有余额状态外,其还拥有合约存储状态。

  下面我们来看看以太坊账户的创建、钥匙文件及备份?

    i.创建账户

           创建账户前提是安装好以太坊和go-ethereum,相关链接可参考 https://blog.csdn.net/      bylaven /article/details/80386862?from=groupmessage&isappinstalled=0,接着我们可         以输入personal.newAccount()命令创建用户及设置密码

    ii.钥匙文件

           刚才创建了一个账户,每个账户由一对公私钥来确定,每个账户其实就是一个地址,这个地址即公钥的最后20个字节,这个地址和私钥以json格式存储于keyfile“钥匙文件”中,并且私钥将只存储于用户客户端上。密钥文件格式如下:

{

    "address": "6a787f16c2037826fbc112c337d7b571bb19c022",

    "crypto": {

        "cipher": "aes-128-ctr",

        "ciphertext": "8ed39b22ab67a787baa4ebb545382255f747328e2a3e2e74970a0f66b422d169",

        "cipherparams": {

            "iv": "8e0e0905919d6d1669957fdf65f114ce"        },

            "kdf": "scrypt",

            "kdfparams": {

            "dklen": 32,

            "n": 262144,

            "p": 1,

            "r": 8,

            "salt": "a2a84d4843dbcb7c0aefa933f37ead073aefe8503ac8497b77828e85467c6822"        },

        "mac": "1fc4a5d260fdd70e772fdc9a28614e82d5ff0adc6c98332f8455c5aa0a3352ad"    },

    "id": "7bce1a69-79a2-429a-836c-cc2bf72c80de",

    "version": 3}

    iii.账户备份

       从用户的钥匙文件中可以看出,以太坊账户的私钥的密文存储于ciphertext字段中,用户通过输入密码获取到私钥,而在交易中的所有签名都得通过私钥来完成,一旦私钥丢失,用户的账户将无法找回,因此,备份账户及私钥对我们来说相当对重要。

    备份账户信息,我们只需要找到以太坊对存储目录即可,当然各种操作系统以太坊的存储目录我这不再赘述,相关资料可查看区块链技术指南的以太坊账户备份部分。

二.以太币

        Ether币最小的单位是Wei,即Ether =10^{18}Wei,与比特币一样,以太币也有自己的一套激励机制-----以太坊上账户的操作及智能合约部署等都会支付以太币才能支撑运转,以太币获得都奖励主要分为:

        静态奖励:每挖出一个区块获得5个以太币

        动态奖励:

             1.挖出的区块中交易的费用归矿工所有

             2.挖出的区块中含叔区块,矿工可以从叔区块中领取额外的1/32个以太币的奖励(            每个区块仅限2个叔区块),以太币通过这种机制可以保障大矿池的垄断。

        叔区块:指那些被挖出来的分叉链上的区块(由于网络延迟等原因没有被同步到新的区块中的区块)

三.gas

        智能合约上链后无法修改,为防止恶意用户智能合约产生死循环的可能性,以太坊要求每执行一步智能合约都支付相应的费用,这些费用的最小单位就是gas。每个智能合约消耗的gas是固定的,但花费但gas越多可能能换取但时间越短(一种以金钱换时间的做法)。

        与gas相关的几个概念及关联:

        1.gas花销

         gas花销是静态的,主要针对与每步操作是不变的,保证每个操作的gas花销都一样。  

        2.gas价格

        gas价格是每个gas所兑换的以太币都数量,将随以太币的价格有所波动。

        3.gas费用

        gas价格乘以gas花销即gas费用,单位为以太币。

四.合约

        以太坊智能合约与账户有相当关联,上面我们也曾介绍过账户的类型有外部账户和合约     账户,这里合约账户就是用来专门执行以太坊上的智能合约的。

        1.编写智能合约

            智能合约是一段可被以太坊虚拟机执行的代码,这些代码以二进制的形式存储于区块     链上,也称为以太坊虚拟机位码。目前,使用于开发以太坊智能合约的语音有solidity、serpent和LLL语言,具体相关语言请详细关注:

http://solidity.readthedocs.io/en/v0.4.24/

https://ethfans.org/wikis/Serpent-%E6%8C%87%E5%8D%97

http://llvm.org/docs/tutorial/index.html

        下面以solidity编写一个例子:

pragma solidity ^0.4.17;

contract HelloWorld

{

address creator;

string greeting;

function HelloWorld(string _greeting) public

{

creator = msg.sender;

greeting = _greeting;

}

function greet() constant returns (string)

{

return greeting;

}

function setGreeting(string _newgreeting)

{

greeting = _newgreeting;

}

/**********

Standard kill() function to recover funds

**********/

function kill(string name) public returns (string)

{

require(keccak256(name) == keccak256("panzuchao"));

return name;

}

}

        2.部署智能合约及运行

            以太坊虚拟机在执行时,只识别以太坊虚拟机位码,因此,部署时,得将上面使用solidity高级语言写的代码译成以太坊虚拟机能识别的以太坊虚拟机位码。

            下面我将举例使用truffle来部署我们上面的智能合约:

            truffle的安装等详见:https://blog.csdn.net/loy_184548/article/details/77984366

            在控制台中输入truffle migrate或者truffle migrate --reset,如图:

这样,我们等智能合约已经部署好啦。

        3.调用智能合约

        经过以上的部署运行后,我们可以通过web3.js或者geth cli客户端发起调用,相关调用api可参考

    http://web3js.readthedocs.io/en/1.0/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,527评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,314评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,535评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,006评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,961评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,220评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,664评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,351评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,481评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,397评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,443评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,123评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,713评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,801评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,010评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,494评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,075评论 2 341

推荐阅读更多精彩内容

  • 前言:本篇作为学习笔记的第四篇,重点分析智能合约的技术构成及设计要点,部分基础概念基于前面篇章内容之上不再解释,但...
    六面阅读 1,214评论 0 0
  • 姓名:张汉超 公司:东莞耀升机电有限公司 组别:4月25-27日六项精进245期学员 【日精进打卡第47天】 【知...
    张汉超阅读 320评论 0 0
  • 梦境是我们通向自我直觉力最容易接触的途径。 直觉的心灵是一种神圣的天赋,理性的思维则是忠实的仆人。我们已创造出一个...
    鱼头shiny阅读 700评论 0 2
  • 文/醒着做梦的人 听窗外的雨滴 滴滴落在青苔与墙缝之间 听窗外的脚步 声声环绕红尘与青山之间 听窗外的猫啼 丝丝撩...
    简九五阅读 311评论 0 4
  • “张敏,你个废物!被戴绿帽子活该!被公司开了更活该!你看看你现在的德行,以前自信阳光的你哪去了?!被狗吃了吗?!”...
    围巍阅读 540评论 0 4