区块链–以太坊智能合约编程学习笔记


合约的科普知识

在以太坊虚拟机上,合约程序自动执行,无法被人类干预。一旦部署无法修改。每次执行合约即需要消耗GAS,所以,像C语言一样严谨是必要的。我戏称它为:业务C语言

开发

→编程的语法

  • 开头
pragma solidity ^0.50意味着所使用的编译器,0.50<=编译器版本<0.60
  • 状态变量和函数
示例-1

→可见修饰符含义

→→public与private

对于public和private,相信学过其他主流语言的人都能明白:
  • public修饰的变量和函数,任何用户或者合约都能调用和访问。
  • private修饰的变量和函数,只能在其所在的合约中调用和访问,即使是其子合约也没有权限访问。

→→external和internal

除 public 和 private 属性之外,Solidity 还使用了另外两个描述函数可见性的修饰词:internal(内部) 和 external(外部)。
  • internal 和 某些面向对象的protected关键字类似,如果某个合约继承自其父合约,这个合约即可以访问父合约中定义的“内部”函数。
  • external 与public 类似,只不过这些函数只能在合约之外调用 – 它们不能被合约内的其他函数调用。只能修饰函数不能状态变量。

→→函数是否改变状态修饰符

  • view—可读状态变量,但不能修改
  • pure—不能改也不能读状态变量,是更加严格,而不是与view相反

→→payable修饰符

可以理解成事务,只有被其修饰,函数才有变动账户资金的权利。

→→存储位置修饰符

可以出现在变量或者函数参数前。对于值类型来说,永远是引用传递,而引用类型时,需要参考下面的修饰符来确定是否是引用传递。
  • storage:链上的持久存储的。
  • memory:EVM中的内存,可易失的。不能将memory类型赋值给局部变量(有待考证,因为引用传递下可以改变其赋值)。
示例-2
  • calldata:EVM中的内存,只读的。外部函数的参数(不含返回值),场景多为系统使用。
示例-3
示例-4
示例-5

→货币单位

示例-6

→编译器和开发框架

三种主流的:remix-ide ,solc和jssolc
  • truffle框架使用
https://www.jianshu.com/p/8794afea1996?from=timeline&isappinstalled=0https://truffle.tryblockchain.org/https://www.jianshu.com/p/eac99bb0a9bc

→技巧参考

  • 函数deposit和send的使用
https://blog.csdn.net/tianlongtc/article/details/80220142

IT技术前瞻

思索一些值得提前储备的技能。当今比较高速发展的方向不外乎是:人工智能,大数据,云计算,区块链。这些曾经的前瞻性技术已经悄然来到了我们身边了。然而,技术种类虽多但彼此推动和配合是相当密切的。本人根据生产三者的思路略分析了一下:

技术选型 生产三者
人工智能(AI),云计算 生产力
区块链 生产关系
大数据(分析/安全算法),物联网(IOT) 生产工具

事实上,未来的物流行业需要创新的价值点是生产力和生产关系,即AI和区块链。生产力是硬核,生产关系是降本增效。要想拥有竞争力就要在这两点来发力。虽然应该考虑技术变动和发展完善或成熟的因素,但行业的趋势是明显的。地灾数据的分析挖掘或多式联运一旦成立,都要求更多先进技术的支撑。即便是找外包和与互联网公司合作,都要能有更高的视野和与其它公司对话的基础。

多式联运应用区块链的十大理由

  • 物流追踪基础—货物追踪场景,并不是空间位置层面而是业务流程方面,每笔账都会记录清楚。
  • 边际成本为零—更多承运人加盟,更多交易支付环节也无成本的线性累加(成本包括线上和线下)
  • 会计前置清算—公司不收取客户垫付资金,规避了风险,实时清分结算,这是非常吸引客户的创新和特色,保证了客户资金链运转正常。
  • 多方共识制度—联盟中业务流中可以设计决定谁拥有记账,交易选举权,审查等的权利。角色合作分工,资产管理透明,管理成本降低。
  • 智能合约灵活—具体承运人与上下游承运人交接业务等管理场景。
  • 技术门槛低廉—代码和算法都开源,如果合作商已经有摸索拿来用,整合资源合兵一处。
  • 新兴技术跟随—对人工智能,物联网和大数据等维度上的新技术可以采取跟随战术。
  • 业务边缘扩展—在链上慢慢扩展和分支到相关领域链,比如保险,公益。
  • 课题建设先机—我们可以借此来申请课题,产学研一体。
  • 设币激励制度—对外合伙货运司机积分,以及对内员工的激励。在股份,期权无法刺激员工前,在链上引入币后,可以在公司激励制度设计上合理创新。

区块链阅读笔记

不谈比特币,只谈区块链,要谈也就谈一点儿。

区块链—一个数据库,分布式,账本式。
如果高度概括来说,没错就是个数据库而已。但是包装上了系列的定语,形容词,让它炫丽动人。

  • 分布式,你听不懂,换成去中心化。
  • 第三方交易信任担保,你听不懂,换成去中介化。

必须清楚地看到,比特币只是区块链应用的一个成果,“比特币不等
于区块链”。区块链是多种技术的集成,比特币只是区块链多种技术整合
的一种形式,还可以有不同技术的多种组合形式。因此,区块链的发展
必须跳出“比特币区块链”的思维和定式,不必过于追求理想化,转而
脚踏实地、实事求是,注重运用相关技术解决现实世界的实际问题,并
在实践中不断改进和完善,充分发挥区块链的积极作用。

事实上,比特币是想建立一个“乌托邦”显然,,但东方智慧不会参与天下之先。但会寻找道与术的平衡。

有人说:区块链的底层是数学逻辑,中层是哲学思维,顶层是宗教信仰。
数学逻辑是指:基于成熟的后台技术基因(p2p点对点通信,非对称加密,分布式存储)。现在是3.0版本,拥有智能合约
哲学思维是指:共识方面基于拜占庭将军问题。以太坊的Gas的鼓励政策设计也体现着经济学理念。扯蛋一下,如果春秋七国有区块链,强秦绝无机会。区块链下的价值互联网,玩的全是匿名,而目前的互联网,实名制的伎俩下依然信任危机。特么有点儿“灯下黑”的感觉。
宗教信仰是指:思想正确,而且理论自洽。已经写入国家的计划。宗教字眼都有点小,而是时代所趋。

如果,在中层哲学都有了偏差时和线下交易混乱时,那么这个比特币就仅是个“网络游戏”。你玩的再好也是一个ID,你的账户装备再贵重也只是一串加密数字。

发展过程

v1.0

比特币(Bitcoin)
v2.0

以太坊(Ethereum)
v3.0

开源:
超级账本(Hyperledger fabric)
FISCO-BCOS

《中国区块链行业发展报告2018》

摘录:风投钟情的区块链 8 个领域:
挖矿、钱包、虚拟货币、基础设施、底层技术、交易所、相关服务和区块链应用
中国区块链产业链可谓基本成型。

中央网信办第三批区块链信息服务名称及备案号

区块链的优势

重新定义未来商业生态

如果共识是机器处理二进制一定比人类专业,那就相信机器,使用机器。
就像用筷子,球拍,水壶,电灯泡……
但不同的是这个工具是账本,记录一下与你交易的或者与你有关的别人的交易的哪些事儿。后台的保证是一系列的事务,加密和传输等,这也是区块链最大的贡献。
区块链并不是一个新技术也不是一个独立技术,尤其是在当下,结合相关的链条来看:

AI,云计算——-生产力
区块链——生产关系
机器(安全科技),IOT—-生产工具

有人提出BASIC的技术战略:五个首字母分别是区块链、人工智能、安全科技、物联网(IoT)、云计算
事实上在上面的“生产三者”中都体现了,而且,任何两个新技术的组合和碰撞出的火花都是一个新的细分的领域。

你不知道的区块链

  • 可以没有币
  • 可以自己发币
  • 可以私用,场景有联盟链,公用链系统有比特币和以太坊
  • 代码开源,智能合约是一段流程化的动态合同

防黑客的话,使用联盟链或私有链,同时,一笔生意有时效性,那么让链也有保质期监控,变成离线存储。
对于效率性能问题,那么联盟节点的数量设置限制。交易的数量级下降,效率就一定提升。
技术是有边界的,也没有绝对安全的算法。关键看如何使用,最大限度的规避风险。

应用场景

商业新势力

  • 公益监管,阿里第一个上线的项目
  • 精准扶贫,农业溯源
  • 货品,食品,药品溯源,京东也在搞事情
  • 宠物品种或基因溯源
  • 私人资产管理,艺术品买卖,教育治理
  • 垃圾溯源,实名领取免费发放的垃圾袋(具有唯一性码的环保材料)
  • 去除房屋中介的DAPP
  • 协同办工,共写一本书,一个项目等
  • 物流追踪
  • 清分结算
  • 全国性的或者说多区域,流动席位类票务解决方案(铁路席位管理改造)

蚂蚁链的数字物流解决方案

区块链资源整理

解读以太坊黄皮书系列

一共有七章,目前只找到了六章翻译好的。

第一,二,三章

第四章

第五章

第六章

核心交易流程

  1. 一切源于用户A在DAPP工具上生成一个随机数,反正,我们称它为私钥k。通过把它输入ECDSA运算,得出公钥的全文,一般会比私钥长。再通过hash算法(SHA-3)来得出公钥hash,它的后20位则是用户A的账户地址。
  2. 用户A要交易给用户B一个ETH时,填充一个交易结构体tx.目前还是在用户A的DAPP工具中,对tx进行RIP编码,再hash算法(SHA-3)生成摘要,最后签名,签名结果是65位字节长的值(r,s,v)前两者32字节长。签名实质上是使用私钥k对交易摘要进行加密的过程。
  3. 验证节点出场即机器。它拿到原始交易tx和签名结果。
    1. 首先恢复出用户A的公钥q(是通过交易hash和签名计算出来的)
    2. 签名验证即是用公钥q来解密交易,得出账户名(用户A)
    3. 得出的,计算的,或者说恢复的公钥得出的这个账户名,要和原始交易中from的值做为对比。一致说明内容未被篡改。
  4. 交易一旦合法,就要被矿工进行流水线加工,进入区块。这里是有区别对待的,交易中流通的价值高,蕴的鼓励值越高,矿工也不是傻子,所以,高额交易会更快进入到区块。
  5. 当一个区块生成,即要更新世界观。树就是以太坊这个状态机的后台世界了:默克尔树(一个全局的静态树,叶子节点是指向具体数据区块),MPT状态树,其中M是指默克尔树,显示它是个进化的树结构。

给开发者的启示

方兴未艾的市场

回头看马云建立的支付宝,竟然是最没有互联网精神的阶段性物件。但是它引导和启发了市场。
所谓,分久必合,合久必分。去中心化的结果,会再次制造出中心化。
没有一个互联网公司想放弃区块链这个阵地,所以,纷纷出台自己的方案,但纵观各方案,平心而论,现在蚂蚁链,更能吸引到区块链+的客户。原因很多,它更产品化或者说产品线设计合理,概念更明晰,客户引导方面做的更好。相比其它大厂,还属于在炫技和宣传的层面。本来要去中心化,可是对大部分客户都想“开箱即用”的需求下,那么只能依赖基础设施,而蚂蚁链又准备引导市场了,虽是大鳄,但创业公司并非没有机会。因为,技术的透明的,实践是自己的,激励机制是共同的。
即使中心化再次来袭,我们也可以理性分析,首先,市场变化了,中心化的气焰一定是被打压的,暴利的中心不会存在了,其次,区块链的进化,更多出现的是基础设施的中心化,而不再是交易业务中耦合的中心角色。同时,随着业务扩展和交易数量上升时,边界成本不再线性同比上升。

个人感想

作为一个程序员,以前感觉写业务代码的人是低级的,今天做这个,明天写那个,行业积累看似很有价值,一旦换行就隔了山。直到,区块链的出现,让我眼前一亮,事实上,商业的生产关系是海量的需求,让写业务代码的人至少变成一个可以拿链走南闯北的人,努力创作不再是给别人做嫁衣,甚至是参加到价值互联网的基建圈,写入历史。
开发者就是数字世界的建筑师,全栈工程师越来越受重视,拥有更多的话语权。从对生产工具的精通转型到生产关系的设计和营造,这本身就是一种生产力。三个生产概念互相配合,界线划分得当,找准平衡点就会游刃有余。再扯远一点儿,创业公司的目标应该放在器上而不是方案上,因为要知道,整合资源绝对是自己的弱项。