一、什么是智能合约

智能合约是存储在区块链上的一段代码,它们可以被区块链上的交易所触发,触发后,这段代码可以从区块链上读取数据或者向区块链上写入数据。

二、什么是Browser-solidity

Browser-solidity是一个官方提供的一个基于浏览器的合约编译器,非常好用,而且build版本会紧跟最新的Solidity的build版本。但由于网络原因以及GFW的存在,有可能会另一部分人访问很慢,进而影响开发效率。

Browser-solidity的地址:https://ethereum.github.io/browser-solidity

Browser-solidity工作区域介绍:

1.当前的solidity版本,如上图截图所示为0.4.9,这个默认用的是当前最新的release版本;新版本的solidify版本还有切换都是是在setting菜单下。
2.点击下拉框,可以选择不同的版本,包括还未成熟的最新构建版本,或者是之前的版本等。

3.点击create,会在内存中将该智能合约创建一个实例,即将下面的web3 deploy代码部署在虚拟的内存中。

4.bytecode是源代码的编译产物,这个也是最终会被放到区块链上的标识。任何在网络里的人都可以读到这段bytecode.
5.interface 是智能合约除了bytecode之外的另一个核心,他是该智能合约和外界沟通的核心
6.web3.deploy 代码,是可以直接部署在geth网络上的一段部署代码,在上一章中,我们已经试过了,只要复制黏贴这段代码,就可以直接在一个区块链私有链上进行部署,并且调用他。
7.from 代表合约由那个账户生成,那个账户生成,则生成所需的gas就需要该账户承担,默认为eth.accounts[0],因为所有的挖矿所得的以太币也默认都存入该账户中区。 data: 代表的就是bytecode gas: 代表的是为了部署该合约最多准备的gas数量,当然实际上可能用不了这么多gas,具体消耗以实际使用量为准,这里只是设定一个最大量。
8.最后这段是一个典型的javascript的异步调用的写法,将上面的new方法的结果传递给下一个方法 function(e,contract) 在下一个方法中处理如果挖矿成功的显示结果。

三、编辑源码

部署在Geth上的源代码如下:

3.1源码分析

pragma solidity ^0.4.0;contract Demo {function g(uint a) returns (uint b) {return a*a*2;}
}

第一行代码是必须的,否则编译器将不知道该如何选择编译器,以及编译器版本。
第一行的pragma solidity 中pragma是关键词,代表程序开始,solidity 代表本智能合约是由Solidity语言所撰写
0.4.9 代表的是编译器版本,注意:从0.4.9起可以在前面不打^,0.4.8/0.4.7等版本还是需要打^
编译器版本向下兼容;

第二行:
Solidity中Contract和面向对象语言中的类很相像。有带持久数据的变量,以及能改变这些变量的function. 在不同的Contract实例中调用一个function,将会执行一个在EVM(以太坊虚拟机)中的function调用。
由此可见,Solidity中的智能合约和传统面向对象语言中的类很相像,因此有构造函数,有继承,有变量,有function,也有抽象类等等传统概念。
由Solidity所写的智能合约,经过编译后就会由EVM来部署执行
Solidity语言是一种类JS的语言,因此很多编码规范和JS很相似
第三行:

function f(uint a) returns (uint b) 
        {
            ...
        }
上面说过,contract中包含了变量&方法(function)。function f(uint a) returns (uint b) 代表定义了一个名为f的方法,输入变量为uint a, 输出为uint b
uint 代表无状态的整型数字,即大于0的整数
uint = uint256, 最大值为2的256次方,这个数字对于绝大多数的数学运算是足够得了。
相对于uint来说还有带负数的整数类型,即int, int=int256, 取值范围从 负2的128次方到正2的128次方

Function的核心代码:

function f(uint a) returns (uint b) 
        {
            return uint result = a * a*2;
         
        }
这是一段很平常的js代码,值得注意的是以下两点
Solidity是一个类型语言,因此每个变量都需要定义他的类型,uint/int/string/var

关于编码风格 uint result = a * 8;, solidity 鼓励在操作符中有一个空格。如下:
x = 1;
y = 2;
long_variable = 3;

3.2这个时候在这个地址的左侧,复制黏贴上述的代码,然后就可以看到右侧编译好的代码:

1.这个时候点击红色 Create按钮,会在内存中将该智能合约创建一个实例,即将下面的web3 deploy代码部署在虚拟的内存中。

2.Trasaction/Execution Cost: 这个代表Create一个合约所消耗的成本,单位为Gas。Gas和Ether币有一个兑换关系,兑换比例由Oracle决定
3.这里可以看到我们的合约名称browser/first.sol:demo, 注册在了一个地址上面。这个代表该合约已经被挖矿出来了。
4.第三个就是我们上方的合约代码,g(n) {return 2*n * n}
5.这个时候我们输入3,然后点击f按钮,我们可以看到结果18,符合预期,执行f()这个function消耗的Gas Cost是21693+229

四、部署合约

4.1我们在命令行中,首先unlock(cc0),因为部署合约需要消耗gas,也就是以太币。而之前说过由于保护机制,不解锁账户,是不会允许任何以太币流出的。

4.2然后我们复制黏贴下面代码到geth 命令行中。

4.3等待片刻,会发现合约被部署到挖矿挖出来的区块中了, 按下回车代表成功

4.4此时输入合约部署的实例a_demotypes, 可以看到a_demotypes的详情。

4.5也可以调用a_demotypes的方法g, 输入任何数字,会返回n*n*2,如输入3,返回18

以太坊之部署智能合约相关推荐

  1. 基于以太坊网络的智能合约开发、部署和测试(入门)

    为什么80%的码农都做不了架构师?>>>    基本概念: 以太坊是一个开放的.公开的区块链平台,允许用户构建自己的去中心化应用在上面运行 Solidity是一种语法类似JavaSc ...

  2. 元宇宙应用开发实例——以太坊里的智能合约和Decentraland里的3D前端交互组件

    目录 1. 元宇宙核心技术 2. 元宇宙实例及应用实例 3. 以太坊里的智能合约开发 3.1. World Wide Web的访问能力 3.2. 初始化以太坊钱包 3.3. 开发4方合约 3.4. 手 ...

  3. 比特币开发者:BSC可能会超越以太坊成为顶级智能合约平台

    比特币开发者Udi Wertheimer发推称,我觉得这是以太坊作为顶级智能合约平台的最后一个周期了. 昨天币安智能链(BSC)结算500万ETH,以太坊本身结算700万ETH左右.这可能会很快结束. ...

  4. 以太坊可更新智能合约研究与开发综述

    原文地址:https://ethfans.org/posts/ethereum-upgradeable-smart-contract-strategies 这篇文章是对以太坊可更新智能合约领域里的研究 ...

  5. 以太坊—开放的智能合约完整解决方案

    什么是以太坊(Ethereum)? 通俗的讲,以太坊是一种新的法律.传统的合同合约依据法律订立,执行.违约处理依赖律师.法院:以太坊解决了这一系列问题,合约通过程序订立.执行,人工无法干预,所以几乎可 ...

  6. 区块链入门文章二《以太坊:下一代智能合约和去中心化应用平台》

    以太坊:下一代智能合约和去中心化应用平台 以太坊基金会 著 李志阔(网名:面神护法) 赵海涛 焦锋 译 中本聪2009年发明的比特币经常被视作货币和通货领域内一次激进的发展,这种激进首先表现为一种没有 ...

  7. 3.25 以太坊:实战智能合约众筹1

    这次我们来看看怎么实现以太坊的众筹智能合约案例,首先我们了解一下下面的概念  1.什么是ICO?  ICO是以初始产生的数字加密货币作为投资回报的一种筹措资金的方式,它的概念源自证券界的Initial ...

  8. 附录2 以太坊:下一代智能合约和去中心化应用平台(选译)

    以太坊基金会 著 李志阔(网名:面神护法) 赵海涛 焦锋 译 中本聪2009年发明的比特币经常被视作货币和通货领域内一次激进的发展,这种激进首先表现为一种没有资产担保或内生价值[1],也没有中央发行者 ...

  9. 以太坊:下一代智能合约和去中心化应用平台

    以太坊基金会 著 李志阔(网名:面神护法) 赵海涛 焦锋 译 中本聪2009年发明的比特币经常被视作货币和通货领域内一次激进的发展,这种激进首先表现为一种没有资产担保或内生价值[1],也没有中央发行者 ...

最新文章

  1. LeetCode简单题之统计匹配检索规则的物品数量
  2. 项目部署时网关怎么回事_使用Kubernetes部署聊天网关(或技术按预期运行时)...
  3. TensorFlow + Docker + PyCharm
  4. 山东师范大学计算机尹副教授,我校举办首届优秀教案展评工作
  5. xml可以html标签吗,自定义html标签(XML)
  6. 对称密钥加密算法 对称轮数_选择Java加密算法第2部分–单密钥对称加密
  7. 开氏温度与摄氏度换算_【油品小知识】你不知道的“柴油密度”与“温度”的故事...
  8. pytorch torch.arange
  9. Java关键字break、return、continue
  10. matlab netcdf,Matlab读取Netcdf文件
  11. 如何在SQL Server数据库中删除角色
  12. sigprocmask系统调用
  13. Android 8.0 Oreo 来啦!
  14. Unity AssetBundle 资源(纹理,网格,动画,字体,LightMap,音频等)使用 优化
  15. SPSS 26下载与安装
  16. 定积分的基本性质5 区间可加性
  17. kettle carte子服务器的使用
  18. 存储过程和触发器-LOGON/LOGOFF触发器
  19. 一个简单的CD唱片管理程序
  20. 机械键盘和普通键盘打字哪个舒服

热门文章

  1. windows10 使用小技巧
  2. 关于 find grep xargs 命令总结
  3. 新手如何循序渐进学习3dmax室内设…
  4. EasyAR 开发技巧----截屏
  5. 传奇服务器维护活力值怎么算,怎么办啊请问那个活力值是怎么搞的,我的活力 – 手机爱问...
  6. CF1674 F. Desktop Rearrangement(二维转一维, 模拟)
  7. 微博爬虫“免登录”技巧详解及 Java 实现(业余草的博客)
  8. BCM VOIP 启动分析
  9. 像素鸟简单的背景设置_01
  10. 生活服务app的开发优势