区块链 --- 智能合约
目录
- 1、智能合约是什么
- 2、用户账户和合约账户
- 3、智能合约部署过程
- 4、智能合约调用过程
- 5、以太坊的交易类型
- 5.1 价值传递
- 5.2 创建智能合约
- 5.3 调用合约方法
- 6、代币(Token)
- 7、ERC20标准
1、智能合约是什么
智能合约是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。
智能合约可以调用其他智能合约,这开启了创造一个自主代理的能力,这些代理可以自己进行交易。
2、用户账户和合约账户
用户帐户有:
- 地址(有点像我们的银行帐号 - 比特币也有同样的概念)
- 余额(我有多少钱: 以太)
智能合约账户有:
- 地址
- 余额(有多少钱: 以太)
- 状态(智能合约中声明的所有变量和变量的当前状态)
- 代码
地址是帐户的唯一标识符,与常规用户帐户一样。
合约用户中有智能合约代码,与个人帐户不同,它可以“主动操作”将交易发送给其他人。因此,如果我们想要使用智能合约的功能,我们必须在个人账户中发送“接收地址作为合同”。 “地址”交易,主动触发合同,让合同执行行动。 因此,任何交易的起点必须是个人账户。
3、智能合约部署过程
1.开发人员用Solidity写完成合同
2.源代码编译为字节码
3.输入交易的输入数据
4.接收地址部分留空(0x0)
5.确定节点(矿工)将合同发送到链
6.矿工执行和部署链以生成智能合约 合同有自己的“合同地址”,永久在链上。
智能合约是部署在区块链的代码,区块链本身不能执行代码,代码的执行是在本地的EVM中,实际上,部署在区块链上代码是能够在本地产生原智能合约代码的代码,可以理解区块链为一个数据库,而客户端从数据库中读取了存储的运行代码,并在本地运行后,将结果写入到了区块链这个数据库中。
4、智能合约调用过程
5、以太坊的交易类型
以太坊与比特币很大的不同是其交易还有一个DATA
字段。 DATA字段支持三种类型的交易:
- 价值传递 (和比特币相同)
- TO :收款地址
- DATA :留空或留言信息
- FROM :谁发出
- AMOUNT :发送多少
- 创建合约
- TO :留空 (这就是触发创建智能合约的原因)
- DATA :包含编译为字节码的智能合约代码
- FROM :谁创建
- AMOUNT :可以是零或任何数量的以太,它是我们想要给合约的存款。
- 调用合约函数
- TO: 目标合约账户地址
- DATA: 包含函数名称和参数 - 标识如何调用智能合约函数
- FROM :谁调用
- AMOUNT : 可以是零或任意数量的以太,例如可以支付合约服务费用。
5.1 价值传递
{to: '0x687422eEA2cB73B5d3e242bA5456b782919AFc85',value: 0.0005data: ‘0x’ // 也可以附加消息
}
非常简单,就是转移一定数量的以太到某个地址,如果我们愿意也可以向交易添加消息。
5.2 创建智能合约
{to: '',value: 0.0data: ‘0x6060604052341561000c57xlb60405160c0806……………’
}
如上所述,TO为空表示创建智能合约,DATA包含编译为字节码的智能合约代码。
5.3 调用合约方法
{to: '0x687422eEA2cB73B5d3e242bA5456b782919AFc85’, //合约value: 0.0data: ‘0x6060604052341561000c57fe5b60405160c0806……………’
}
6、代币(Token)
数字代币代表区块链总账上的记账权
代币的作用:
一个区块链项目往往就是一个程序,而且是开源程序。免费的开源程序没人干,必然需要商业利益驱动。代币数量往往是有限的,需求增加,代币则会增值。为了让代币增值,开发者就必须不断完善及优化相关技术;而每个使用该区块链网络服务的用户,则需要向以太坊矿工支付一定费用,以激励其继续参与整个网络的维护。
以太坊的代币:以太币(ETH)
- 作为一种燃料。以太坊用户运行以太坊的智能合约需要“消耗”对应的以太币。消耗指的是支付给了维持以太坊网络的矿工。
- 同样具备货币这样的支付属性。
- 也同样可视作为持有以太坊这种”世界计算机“的股票。
ETH和Gas的关系:以太网每天的Gas价格不同,因此两者之间的转换率也不同。
7、ERC20标准
https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md
ERC20标准以太坊上的一个代币协议,所有基于以太坊开发的代币合约都遵守这个协议。
- name
function name() constant returns (string name)
返回string类型的ERC20代币的名字,例如:StatusNetwork
- symbol
function symbol() constant returns (string symbol)
返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT
- decimals
function decimals() constant returns (uint8 decimals)
支持几位小数点后几位。如果设置为3。也就是支持0.001表示。
- totalSupply
function totalSupply() constant returns (uint256 totalSupply)
发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。
- balanceOf
function balanceOf(address _owner) constant returns (uint256 balance)
输入地址,可以获取该地址代币的余额。
- transfer
function transfer(address _to, uint256 _value) returns (bool success)
调用transfer函数将自己的token转账给_to地址,_value为转账个数
- approve
function approve(address _spender, uint256 _value) returns (bool success)
批准_spender账户从自己的账户转移_value个token。可以分多次转移。
- transferFrom
function transferFrom(address _from, address _to, uint256 _value) returns (bool success)
与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。
- allowance
function allowance(address _owner, address _spender) constant returns (uint256 remaining)
_spender返回仍然允许从_owner提取的金额。
- 账户A有1000个ETH,想允许B账户随意调用100个ETH。
- A账户按照以下形式调用approve函数approve(B,100)
- 当B账户想用这100个ETH中的10个ETH给C账户时,则调用transferFrom(A, C, 10)
- 这时调用allowance(A, B),可以查看B账户还能够调用A账户多少个token。
参考链接:
https://zhuanlan.zhihu.com/p/206910261
如有不对,烦请指出,感谢~
区块链 --- 智能合约相关推荐
- android区块链 钱包_区块链研究实验室|从Android调用区块链智能合约
本教程将展示如何直接从Android开发环境-Android Studio中调用智能合约. 环境要求 我们将使用Tezos区块链.为了使我们的Android java代码与现有的.部署的智能合约交互, ...
- 区块链智能合约入门:Hello world(2)
这次的基础合约Hello world 有所升级,增加了updateMessage,让你可以随时更新自己想说的话. 其实在区块链智能合约入门:Hello world(1)这篇文章里已经介绍过,Hello ...
- 区块链 智能合约 简介
根据谷歌趋势数据显示,目前,程序员对智能合约编程的兴趣已经处于历史最高水平,其中中国高居全球榜首,随着区块链技术的发展,相信日后智能合约将会与我们的生活密切相关,今天就为大家介绍一下什么是智能合约. ...
- 智能合约重构社会契约(11)天德区块链智能合约系统
智能合约是可以运行在区块链上的合约代码,是一种运行在区块链之上的电子协议,它允许在没有第三方的情况下进行可信执行. 1. 设计原则 智能合约数据来源于链上. 智能合约的输人是从区块链的数据库里出来的. ...
- 什么是智能合约 区块链_什么是区块链智能合约?
什么是智能合约 区块链 关于区块链智能合约的第一件事是它们不是智能合约,或者不是区块链上的合约. 实际上,它们的名字是奇异的. 1 ,让我们将按照相反的顺序这些问题,我们应该搞清楚一个聪明的合同实际上 ...
- 了区块链开放平台baas_区块链开放平台 BaaS 系统开发,区块链智能合约撰写服务...
区块链开放平台 BaaS 系统开发,区块链智能合约撰写服务 什么是区块链即服务? 区块链即服务是一种独特的经济模型,允许消费者使用基于云的服务来开发,使用和托管其区块链应用,功能和智能合约. 源中瑞 ...
- 区块链智能合约教材出版
庆祝我们的区块链智能合约教材出版.感谢电子工业出版社的章海涛编辑和合著者华科软件学院的黄立群教授,华科计算机学院黄晓涛教授.购买链接在:https://detail.tmall.com/item.ht ...
- [区块链安全-Ethernaut]区块链智能合约安全实战-已完结
[区块链安全-Ethernaut]区块链智能合约安全实战-已完结 准备 0. Hello Ethernaut 准备工作 创建实例并分析 合约交互 总结 1. Fallback 创建实例并分析 合约交互 ...
- 【区块链 | 智能合约】Ethereum源代码(8)- Ethereum服务和以太坊P2P协议发送广播源码分析
在"[区块链 | 智能合约]Ethereum源代码(2)- go-ethereum 客户端入口代码和Node分析"一文中,我们提到Ethereum作为一个service,被Node ...
- 论述《区块链智能合约的合同效力认定》去中心化金融的钞能力赛道
| 没有喧嚣,没有问候的"沉默",请安静听完这段征途故事! 摘要 智能合约是自动执行合同条款的代码协议,其以代码替代传统人为执行合同,本质上是运用代码"编译"传 ...
最新文章
- JDBC连接mysql数据的7个步骤(讲解+源码)
- phpmyadmin 忘记密码重设password
- android100 自定义内容提供者
- 怎么查看服务器是多少位系统,查看服务器是多少位的
- 柏林的评委还识货,我的打赌也算是赢了
- 百度指数可视化_可视化指数
- 为什么谈及硬件,必言软件?软硬件协同让开源世界“阴阳调和”
- xmind使用教程思维导图
- python用小矩形标记数据点_Python – 在散点处绘制已知大小的矩形
- FP Growth算法简介+实例
- 软件功能测试点---总结大全
- centos系统上安装masscan
- 远程服务器批量管理员权限,Win10系统下怎样实现批量远程桌面管理?Win10系统进行批量远程管理的方法...
- AddressBook获取通讯录
- 分布式技术原理与实战45讲--05 第05讲:共识问题:区块链如何确认记账权?
- 实战案例汇总,Java架构师实战视频教程
- 进大厂一条龙服务(Java核心面试知识点+一线大厂Java笔试面试题+月薪3万Java优秀简历模板),看这篇就够了
- 创建Abp+.net 6+Mysql 项目
- 【linux报错解决】ECDSA host key for X.X.X.X has changed and you have requested strict checking
- rar密码恢复之尝试
热门文章
- 树莓派4b乌班图服务器系统,【树莓派4B】8、树莓派软路由,Ubuntu18.04配置路由转发...
- PageAdmin CMS 环境配置要求
- w ndows10支持微信吗,怎样在windows10系统电脑中登录微信
- 用数组保存每个月份的天数,输出每个月有多少天。输入一个年份,输出该年份每个月的天数(提醒:闰年二月份多一天)
- 登录页面测试用例设计方法
- Button上面添加一个图片
- 基于vue与element实现创建试卷相关功能
- atlas单机模式代码_已经厌倦了海盗间的纷争?海盗游戏《ATLAS》的单机模式了解一下...
- 时序模型:循环神经网络(RNN)
- ArcGIS在线应用介绍(12)华盛顿州地质信息门户