区块链读书笔记04 - 以太坊

2023-11-13

以太坊(Ethereum)

以太坊是一个去中心化平台,可以在其上运行使用智能合约编写的DApp(DApp可以由一个或多个智能合约构建。以太坊智能合约是在以太坊上运行的程序,可以使用Solidity语言编写。智能合约完全按照程序运行,杜绝了停机、中心化操控、欺诈和第三方干涉的可能性。)

使用以太坊运行智能合约的主要优点是方便智能合约彼此交互,而且不需要担心整合共识协议等事情,只需编写应用所需逻辑即可。

以太坊内置了一种加密货币——以太币(ether)。部署智能合约或者执行智能合约函数需要用到以太币。

和任何其他DApp一样,智能合约可以有多个实例,且每个实例都有自己专门的地址。用户账户和智能合约都可以持有以太币。

以太坊使用区块链数据结构和工作量证明共识协议。智能合约可以通过发送交易调用或者其他合约调用。

以太坊关键概念

账户(Account)

  • 外部账户(Externally Owned Accounts,EOA)
    一般意义上的用户账户,用户在创建账户时自动生成公私钥对,编码存放在Keyfile中,私钥使用用户口令加密,公钥哈希值截取后20位作为账户地址
  • 合约账户(Contract Accounts)
    保存在以太坊区块链上,是合约代码(功能)和数据(状态)的集合。合约账户通过外部账户或既存合约账户进行部署和操作控制。在部署合约二进制代码时由以太坊虚拟机(EVM)基于创建者账户地址、创建者交易nonce生成账户地址。账户地址生成过程如下图所示。
    以太坊账户

交易(Transaction)

以太坊的交易是外部账户发往其他账户(外部账户或合约账户)报文结构体,只要包括接收者地址(0地址代表新建合约实例)、发送者签名、发送金额、数据域(若接收方为合约账户)、Gas上限和Gas价格。

消息(Messsage)

以太坊的消息是合约账户发往其他账户(外部账户或合约账户)报文结构体,主要包括消息发送者、消息接受者地址、发送金额、数据域(若接收方为合约账户)和Gas上限。

Gas

由于以太坊为公有链设计,为了避免恶意程序无代价发动Dos攻击或滥用以太坊网络,参考比特币引入了经济概念,所有在以太坊EVM上的操作和存储消耗都需要Gas。

交易发送者设定Gas上限和Gas价格作为矿工打包费用。如果费用过低,矿工可以选择不打包交易到区块。

合约在执行过程中,如果当前代码执行以及子消息产生的代码执行发生的所有Gas消耗超过Gas上限,矿工依然可以获得打包费用,但是当前交易的所有状态都会被回滚。如果未出现Gas耗尽(gas overrun),交易成功执行,所有未消耗的Ether(以太币)依然会返回发送者账户。

矿工挖矿获得Ether,合约执行消耗Ether,形成天然的供求关系。Gas只与程序逻辑处理复杂度有关,将其与市场波动相关的Ether价格隔离开,通过发送者设定Gas Price的方式,可以对抗通货紧缩/膨胀。

合约(contract)

以太坊的合约即为合约账户,是以EVM字节码形式存储的代码(功能)和数据(状态)的集合体。它们以Patricia树组织,存储在区块链的账户地址上,账户可以相互发送交易或消息事件,在Gas上限内进行一次交易的图灵完备运算。交易发送者支付实际消耗Gas * 指定GasPrice的Ether给矿工作为费用,将此交易和结果打包到下一个区块上。智能合约的交互如下图所示。
智能合约间的交互

以太坊虚拟机(EVM)

以太坊虚拟机是智能合约的运行环境,是比JVM或Docker VM“沙箱”模式还严格的一种完全隔离的虚拟运行环境。运行在EVM中的合约代码无法访问网络、文件系统和其他进程,合约之间的访问也受到严格限制。EVM是基于栈操作的虚拟机,栈最大深度1024,每个元素32个字节,其指令集由最基本的算术、位、逻辑、比较、条件跳转、无条件跳转这些满足图灵完备的最小指令集组成,EVM可以发送消息调用其他合约,还可以加载目标地址的合约代码在当前合约上下文执行(callocode)

DApp(去中心化应用)

DApp直接关联起用户和服务提供方,即买卖双方的应用。以太坊提供多种语言版本的API客户端,并通过以太坊客户端接入网络,DApp基于这些API客户端,把需要共识的业务逻辑和数据以合约的形式部署到以太坊区块链上,并按照需要执行API调用操作。那些不需要共识的逻辑在DApp自身中实现,以降低运行成本。

API库 语言 项目地址
web3.js JavaScript https://github.com/ethereum/web3.js
web3j Java https://github.com/web3j/web3j
Nethereum C#.NET https://github.com/Nethereum/Nethereum
ethereum-ruby Ruby https://github.com/DigixGlobal/ethereum-ruby

以太坊架构

作为分布式价值交换网络,以太坊要建模的是一个公有的、可以被世界上任何一个联网的人使用的状态机。这个状态机由交易驱动,在其上可以执行图灵完备的应用,可以自动在分布式不信任的互联网上达成共识。
P.S. 有关图灵完备的理解可参见:什么是图灵完备-知乎图灵完备-百度词条

以太坊遵从如下架构原则:

  • 三明治复杂度模型
    为确保以太坊网络底层尽量简单、以太坊的上层应用接口也尽量简单,将复杂度集中在中间层,如核心共识、高级语言编译器、参数序列化和反序列化脚本、存储数据结构模型、LevelDB存储接口和通信协议等。
  • 对应用自由无偏见
    不对用户发布的合约和发起的交易有任何限制或鼓励,本着“网络中立”的原则,以太坊“交易手续费”让过度使用网络付出相应的代价。
  • 协议和操作码通用性
    所有协议特性和EVM操作码都包含尽量少的语义含义,这样可以充分组合使用,满足未来更高级的语义用途。
  • 没有提供专门的特性
    通用性设计的必然结果就是平台的协议不提供任何特性。用户可以把这些特性通过智能合约的方式实现,如特定的合约代币(token)、侧链。
  • 有风险偏好
    对于存在引起风险的技术改变,如果可以带来很大的收益,如极大地提高出块速度、提高共识效率,都是可以接受的。

以太坊数据模型

RLP编码

全称:Recursive Length Prefix(递归长度前缀)
该算法可用来序列化任意嵌套的二进制数组,是以太坊主要的序列化编码算法。

序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象

编码对象基本元素(item)可以是一个字符串,也可以是由若干item组成的列表。

Merkle Patricia树

改进版Merkle Patricia树是以太坊主要的数据结构,用来存储键值对,可用于账户状态、交易列表、收据列表等类似字典(dictionary)的数据结构,并进行树形结构的数据表示和存储,对于插入、检索、修改、删除可以实现 O ( l o g ( n ) ) O(log(n)) O(log(n))搜索复杂度。

账户模型

区别于比特币的UTXO模型,以太坊对的数据模型更像用传统的数据库方式存储状态,状态包括账户余额和智能合约账户的各种状态,通过层层组装,最终将以太坊所有账户和对应的状态(包括合约存储子状态哈希)用Patricia树的方式组织成账户模型。

以太坊的所有账户(EOA和合约账户)都需要保存余额。另外,对于合约账户,还需要保存合约账户的各种状态值,把合约账户中所有要记录的状态和对应的值以Patricia树方式构建得到合约账户的状态存储根哈希值(storageRoot),对于外部用户账户EOA,这个值就是空字串。

以太坊会将所有账户的余额(balance),账户交易序列号(nonce),账户的状态存储根哈希值(storageRoot),合约代码哈希值(codeHash)组成的元组[nonce, balance, storageRoot, codeHash]进行RLP序列化编码的字符串作为value,以对应账户的20个字符账户地址作为key,再以Patricia树进行组织,计算出世界状态根哈希值,作为当前区块头哈希值的计算要素之一。

区块结构

一个区块由区块体[uncleHeaderList, transactionList]和区块头blockHeader构成。

交易列表(Transaction List)是当前打包进区块的所有交易。一个交易可以是外部账户的转账交易,也可以是合约部署交易,还可以是合约函数的执行交易。

区块头结构和生成过程如下图所示:
区块头结构和生成过程

比特币和以太坊系统比较

图灵完备性

  • 以太坊:引入了编程上图灵完备的智能合约功能,从而用户可以自己定义数字资产和流通的逻辑,通过以太坊虚拟机几乎可以执行任何计算
  • 比特币:不具有图灵完备性,只能支持比特币的转账

共识机制

都使用PoW(工作量证明)

数据模型

  • 比特币采用的是UTXO模型:
    UTXO,全称Unspent Transaction Output。
    每一笔交易都是由输入和输出两部分组成,环环相扣。除了Coinbase交易,普通的转账交易,其输入部分都是来自于上游的输出部分。也就是说,对于某一个账户地址来说,能有多少比特币可以转账,取决于他拥有多少可用的剩余的“输出”中的余额。
  • 以太坊采用的是账户模型
    由于在以太坊虚拟机上运行的程序非常复杂,每一步指令的运行都需要消耗Gas进而消耗交易发起者的加密货币,为了提高网络攻击成本,运行不成功的交易所消费掉的Gas不被返还。采用账户模型可以减小空间和时间复杂度。

货币发行机制

  • 比特币:
    • 总量上限2100万
    • 打包区块的矿工可以自行设定手续费,也可以仅设定为默认的必要费用——0.00001BTC/KB
    • 平均出块时间为10分钟
  • 以太坊:
    • 无区块上限限制,无以太币总数上限限制
    • 引入Gas,每一个交易都需要包含gas上限和为每个gas支付费用的单价,矿工可以选择接纳交易和收取费用
    • 平均出块时间为20秒

区块结构

  • 以太坊
    在以太坊中,无效块(产生分叉后被忽略的合法区块)被称为叔块(uncle block)。对于无效块矿工,也会给予一定奖励回报,但是少于有效块矿工的奖励。
  • 比特币
    无效分叉将被舍弃

个人对区块链系统设计的看法

安全性

区块链系统的一个弱点是:“它建立在大多数人群总是诚实的假设之上”,故而存在一个51%攻击问题。
此外,智能合约的安全漏洞也是一个问题:区块链上的智能合约是一种全新的计算范式。智能合约一经部署就难以修改,其执行也是自动执行,不受人为干预。引入,如果智能合约有漏洞,就很难防范黑客的攻击。在实践中要提高智能合约的安全性,一定程度上与程序员的编程能力相关。

给出以下建议,在实际编程中尽量遵守,你的合约将更具安全因素
1)更完善的编写测试。
2)建议提供容错和自动错误赏金。
3)为最糟糕的情况做准备。智能合同中的漏洞,应该尽可能让它安全地恢复。
4)添加额外的安全机制。合同的管理者可应急性地冻结合约。
5)限制合约资金存放金额,提高攻击者成功的门槛。
6)不要从零开始编写你所有的代码,尽可能参考成功者的合约。
7)注意开发平台的限制。

共识机制

目前比较广泛采用的PoW共识机制显然在一定程度上造成了算力的浪费,受课堂上老师讲课的启示,个人认为也许可以尝试将这些算力用于解决一些NP难问题或者其他实际需要解决的消耗较大算力的问题。

交易效率

在区块链系统中用TPS指标衡量一个系统的交易效率。

TPS可基于测试周期内完成的事务数量计算得出。一个系统吞吐量通常由TPS、并发数2个因素决定。每套系统的这两个值都有一个相对极限值。在应用场景访问压力下,只要某一项达到系统最高值,系统的吞吐量就上不去了,如果压力继续增大,系统的吞吐量反而下降,原因是系统超负荷工作,上下文切换、内存等等其他消耗导致系统性能下降。

根据这个指标,以比特币为例,其TPS约为7,以太坊大概为20,换算到一天24小时的概念,大概相当于比特币30万笔/天,以太坊45万笔/天。
根据Blockchain的数据,投资者大概需要平均78分钟来确认一次比特币交易。个别时段,这一平均时长一度高达1188分钟,也就是将近20小时。这将大大降低用户使用比特币的兴趣。

参考资料

[1] 邹均,于斌,庄鹏,邢春晓.区块链核心技术与应用[M].北京:机械工业出版社,2018
[2] Narayan Prusty.区块链项目开发指南[M].北京:机械工业出版社,2018
[3] 袁勇,王飞跃.区块链技术发展现状与展望[J].自动化学报,2016,42(04):481-494
[4] Wood, Daniel Davis. “ETHEREUM: A SECURE DECENTRALISED GENERALISED TRANSACTION LEDGER.” (2014).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

区块链读书笔记04 - 以太坊 的相关文章

  • Fisco Bcos 答疑

    问 测试8的结果 集群中有4个节点 其中宕机3个 发起一笔交易 交易失败 然后启动宕机的3个节点 还是交易失败 但如果有一笔新的交易执行 会激活上一笔交易 交易失败的那一笔 最后失败的那一笔会交易成功 这种情况下的交易原理是怎样的 答 不存
  • 在区块链世界中的token到底是什么?

    token的概念很广泛 在计算机领域中 无论是基础的网络架构还是服务系统的身份验证等 都有涉及到token的概念 然而在这里我想阐述的是在区块链世界中的token是什么 相信对区块链有些了解的朋友 都或多或少的听过或者看过关于token的描
  • Gikee 大数据

    据Gikee数据显示 今日13 58分 地址 1MAhRt279uYmVC1dUxKR6dWwEULBJT34Nh 向地址 1Fc4QQu6nEc4snAe4HAb4Kryd8koH89pYk 转了34010个BTC 价值约2 17亿美元
  • 区块链应用开发(智能合约的开发和WeBASE合约IDE的使用)

    文章目录 四 智能合约的开发和WeBASE合约IDE的使用 一 实验概述 二 实验目标 三 实验环境及建议 四 实验步骤 4 1 启动Webase 4 2 智能合约开发 4 2 1 合约功能设计 4 2 2 存证合约开发 4 2 3 工厂合
  • 区块链学习笔记(六)——区块链的分类

    文章目录 一 强调 二 公有链 联盟链 私有链 1 公有链 2 联盟链 3 私有链 总结 一 强调 先做一下重复强调 区块链技术是集分布式存储 点对点传输 共识机制 加密算法 数据区块等概念于一体的新兴技术集合 二 公有链 联盟链 私有链
  • Go语言实现区块链与加密货币-Part3(交易优化,单机模拟多节点通信)

    交易 二 在这个系列文章的一开始 我们就提到了 区块链是一个分布式数据库 不过在之前的文章中 我们选择性地跳过了 分布式 这个部分 而是将注意力都放到了 数据库 部分 到目前为止 我们几乎已经实现了一个区块链数据库的所有元素 今天 我们将会
  • 首个数字银行卡明年发行,广州出台区块链措施支持大湾区

    锌链接作为首个提出产业区块链的机构媒体 一直积极推动产业区块链落地 通过深度报道直戳行业痛点 通过分享会聆听行业声音 通过周报呈现行业大观 通过评论展现独特产业观察视角 本周 广州出台66条措施支持粤港澳大湾区金融发展 其中多项与区块链有关
  • 区块链技术是如何应用到版权维护上?

    随着视频和音乐行业的迅速发展 数字出版已经形成完整的产业链 带来一些可观的收入 但是也伴随侵权的现象发生 那么区块链技术怎么运用到作品版权保护上呢 1 时间戳 我们知道区块链有一个 时间戳 这个可信时间戳由权威机构签发 能证明数据电文在一个
  • 阿里巴巴都害怕的区块链电商到底是什么?

    近日 区块链权威机构中国通信工业协会区块链专业委员会 CCIAPCB 发出倡议 联合各界将中共中央政治局10月24日集体学习区块链主席讲话日作为 区块链中国日 此次中央将区块链技术放在了国家战略层面高度上 让区块链一时间成了全民热点 特别是
  • 不要向全网放通你的ETH系列节点的rpc接口访问权限!!!

    北京时间 2021年 8月 27 日 20 点 50 分左右 区块高度 13107518 一个共识漏洞 利用了 geth v1 10 8 中修复的共识漏洞 袭击了以太坊主网 以太坊因遭到攻击而导致分叉 攻击的根本原因在于 Geth 旧版本在
  • 区块链的安全性与去中心化特点:深入探讨区块链技术的安全性和去中心化特点

    摘要 本文将深入探讨区块链技术的两个核心特点 安全性和去中心化 区块链作为一种分布式账本技术 通过其独特的安全性和去中心化特点 在许多领域引起了广泛关注 我们将分析区块链的安全性原理和其与去中心化的关系 以及区块链技术在保护数据安全和提供信
  • 区块链数据的存储和更新

    目录 1 引言 2 主要流程 2 1数据库读取 2 1 1 从数据库加载块数据 2 1 2从数据库读取账户信息 2 2 区块链数据更新与回滚 2 2 1 交易数据 2 2 2 块数据 1 引言 在第一篇文章里我们从静态的角度讲解了以太坊的数
  • 近千万EOS被盗事件回顾,大家请保护好自己的EOS私钥

    最近有伙伴被盗了价值近千万的EOS 于是查看了这次被盗活动账号记录 这次分享出来 一是有可能大家有线索 二是也让大家意识到数字货币私钥安全的重要性 事件回顾 受害人在7 9号被偷盗人通过update auth更换了账号授权公私钥 紧接着被转
  • 区块链中的哈希算法

    区块链中的密码学 密码学在区块链中的应用主要有两个 哈希算法与非对称加密算法 这次主要对哈希算法进行详细的说明 哈希算法 哈希算法的特点有 1 输入可以为任意大小的字符串 2 产生固定大小的输出 3 可以在合理的时间内算出输出值 若要满足密
  • 新加坡社区领袖卓顺发的荣誉与大爱精神

    2023年11月24日 善济医社义务执行主席卓顺发太平绅士JP BBM L PVPA受邀出席内政部主办的答谢活动2023 主宾为内政部长兼律政部长尚穆根先生 Mr K Shanmugam 2018年起 卓顺发受委为太平绅士后 应内政部邀请
  • Sui生态DeFi将参加Builder DAO举办的活动,为期三天畅谈如何Build on Sui

    LeadUp the Night是一个定期举办的MeetUp活动 由Builder DAO邀请区块链各方项目开发者 VC担任本活动的讲师 这个活动旨在促进区块链技术的发展和应用 让参与者有机会开发创新的区块链应用 探索区块链技术的潜力 12
  • Moonbeam生态项目分析 — — 跨链借贷协议Orbiter One

    概览 Orbiter One 是一个非托管的借贷协议和DeFi中心 专注于跨链互操作性 通过使用从借贷中赚取的ORB Token铸造的Intergactic Whiskers Brigade NFT 用户可以质押并获得额外奖励 借贷和跨链存
  • 一文了解Substrate

    Substrate是用于构建特定类型区块链的工具箱 它本身并不是一个区块链 而是开发者用来创建独特而强大的区块链的一套工具 Substrate允许开发者可以自己创建所需所想功能的区块链 无需受限于现有的设计 Substrate使用FRAME
  • Sui限定版冬季任务来袭,100万份礼物和50万SUI在等你!

    在这个渐趋寒冷但节日氛围却日渐浓厚的冬日 Mysten Labs非常高兴地向大家宣布 限定版冬季任务已于北京时间12月19日凌晨3点正式启动啦 这次冒险任务充满刺激 奖励丰厚 快来 Mysten Labs任务网站 体验吧 对于参加过Ques
  • 案例研究:YGG 如何通过 GAP 帮助 Pixels 扩大玩家群体

    在 Sky Mavis 联合创始人 Jeffrey Jihoz Zirlin 在 YGG Web3 游戏峰会 W3GS 上发表主题演讲时 他向在场的人们透露 MMO 农场游戏 Pixels 的日活跃用户数已经超过了 130 000 人 这使

随机推荐

  • JsonView插件的使用

    由于谷歌浏览器经常打不开应用商店 还有就是安装第三方插件的办法 方法就如下 由于最近做和json相关的东西 所以 以jsonView插件为例分享一下 1 打开https github com 2 搜索 jsonView 链接 https g
  • class组件使用静态变量 并且通过react编译

    ok 这种情况直接使用 babelrc 然后 npm start 会出现下面err 我试着通过 babelrc 配置 presets babel preset env babel preset react plugins babel plu
  • Mysql学习笔记九--子查询

    1 mysql表子查询 子查询是指嵌入在其他sql语句中的select语句 也叫嵌套查询 单行子查询 指只返回一行数据的子查询语句 多行子查询 指返回多行数据的子查询 使用关键字 in 如何查询和部门10的工作相同的但是不包含10号部门自己
  • 多输入多输出

    多输入多输出 MATLAB实现BP神经网络多输入多输出预测 目录 多输入多输出 MATLAB实现BP神经网络多输入多输出预测 预测效果 基本介绍 程序设计 参考资料 预测效果
  • 服务的边界

    服务边界是服务拆分和集成的前提 1 识别业务领域及边界 当前主要方法论 领域驱动设计 领域可简单理解为特定的业务系统 其中主要的设计维度为策略维度和技术维度 待完善 2 界限上下文 就是根据界限 边界 确定上下文 具体的业务场景 3 服务边
  • css3 transform + deviceorientation实现图片旋转效果

    1 陀螺仪deviceorientation的使用 参考 关于陀螺仪deviceorientation https segmentfault com a 1190000007183883 2 transform各属性的具体使用 参考 深入理
  • 计算机组成原理——单周期CPU

    单周期CPU 项目代码 实验原理 MIPS指令 rom coe文件 代码 顶层模块SingleCycleCPU display外围模块 PC instructionMemory Alu模块 DataMemory ControlUnit 旧的
  • 排序(六):归并排序

    排序算法系列文章 排序 一 冒泡排序 排序 二 选择排序 排序 三 堆排序 排序 四 插入排序 排序 五 二分搜索 排序 六 归并排序 排序 七 快速排序 排序 八 希尔排序 目录 排序算法系列文章 归并排序 Merge Sort 基本思想
  • Python之文件的读写

    文章目录 前言 一 打开和关闭文件 open和close 1 打开文件 2 关闭文件 mode的方式 几种读取文件的函数 写入文件的函数 二 with open as操作文件 1 with open as与open close的区别 总结
  • Ubuntu部署OpenStack zed版本neutron报错:Feature ‘linuxbridge‘ is experimental and has to be explicitly enab

    系统版本 Ubuntu 22 04 1 LTS OpenStack版本 zed 组件 Neutron 组件报错内容 Feature linuxbridge is experimental and has to be explicitly e
  • GLSL中texture3D获得的值大小

    使用OpenGL的glTexImage3D 获得纹理数据 再在片元着色器对数据进行处理texture3D 得到的数据已被压缩到0 1 openGL函数glTexImage3D导入数据后 在GLSL中 数据被进行了压缩 glTexImage3
  • python3GUI--音乐播放器(精简版)By:PyQt5(附下载地址)

    文章目录 一 前言 二 预览 1 主界面 2 歌单页 3 歌词页 4 播放列表 5 mini 6 设置 三 心得 1 解耦 2 体验优化 3 歌词显示 4 双击歌曲后发生什么 四 总结 一 前言 传送门 1 python3GUI 打造一款音
  • 关于Linux下的pid文件

    1 pid文件的内容 用cat命令查看 可以看到内容只有一行 记录了该进程的ID 2 pid文件的作用防止启动多个进程副本 3 pid文件的原理进程运行后会给 pid文件加一个文件锁 只有获得pid文件 固定路径固定文件名 写入权限 F W
  • Elasticsearch聚合分析、mget批量查询、bulk批量更新

    Elasticsearch分组集合 一 分组聚合操作 开启fielddata属性 1 在ElasticSearch中默认fielddata默认是false的 因为开启Text的fielddata后对内存的占用很高 如果进行聚合查询时候就需要
  • Redfish协议测试工具–Postman

    1 工具和资料获取 2 简单使用说明 1 GET类举例 2 PATCH类举例 3 常见命令 1 工具和资料获取 Postman工具获取 服务器Redfish接口说明文档 使用前必读接口文档中 适用的产品 查看自己的服务器是否支持此协议 2
  • 简单sql注入

    报错注入找列数 确定为16 联合查询找回显点 查询数据库和数据库版本 版本为5 0以上 需要对查询的内容加密否则报错 结果不是需要的 查询所有的表 获得表名cms users 获得字段usename password 得到账号密码
  • 用java代码验证char类型数据占几个字节

    char为字符型数据 储存单个字符 但阿拉伯数字 英文字母 标点符号等皆为字符型数据 占用字节看似错综复杂 但是char也为脱离计算机基本 二进制储存机制 char本质上内存中皆存储字符编码 1 127为ASCII码 也就是常用的字符 但在
  • 关于iOS9中的App Transport Security(ATS)相关说明及适配

    iOS9中新增App Transport Security 简称ATS 特性 主要使到原来请求的时候用到的HTTP 都转向TLS1 2协议进行传输 这也意味着所有的HTTP协议都强制使用了HTTPS协议进行传输 原文如下 App Trans
  • VS2010:error C2061: 语法错误

    实例 类名 类中包含的头文件 point iostream line point flat flat line 输出错误 error C2061 语法错误 标识符 flat 解决办法 前置声明 line h class flat
  • 区块链读书笔记04 - 以太坊

    区块链读书笔记04 以太坊 以太坊 Ethereum 以太坊关键概念 账户 Account 交易 Transaction 消息 Messsage Gas 合约 contract 以太坊虚拟机 EVM DApp 去中心化应用 以太坊架构 以太