加密:
以太坊有两种不同类型的账户:外部拥有账户(EOA)和合约。EOA 的以太坊地址是从密钥对的公钥部分生成的以太坊使用的系统是基于公钥加密的系统,密钥是成对出现的,由一个私有(秘密)密钥和一个公共密钥组成。私钥提供对账户的控制权,公钥将其识别给其他人公钥密码术(也称为“非对称密码术”)基于椭圆曲线上的算术运算 based on arithmetic operations on an elliptic curve1)椭圆曲线密码学是一种基于离散对数问题的非对称或公钥密码学,通过椭圆曲线各点上的加法和乘法表示。
2)在椭圆曲线算术中,以素数为模的乘法很简单,但除法(逆运算)实际上是不可能的。这称为离散对数问题,目前没有已知的陷门。椭圆曲线密码学广泛用于现代计算机系统,是以太坊(和其他加密货币)使用私钥和数字签名的基础。椭圆曲线密码学提供了一种将消息(即交易细节)与私钥相结合以创建只能在知道私钥的情况下生成的代码的方法。该代码称为数字签名。椭圆曲线数学意味着任何人都可以通过检查数字签名是否与交易细节和请求访问的以太坊地址相匹配来验证交易是否有效。
私钥只是一个随机选取的数字。私钥的所有权和控制权是用户控制与相应以太坊地址相关的所有资金以及访问授权该地址的合约的根源。私钥用于通过证明交易中使用的资金的所有权来创建花费以太币所需的签名。私钥必须始终保密,因为将其透露给第三方就等于让他们控制由该私钥保护的以太和合约。还必须备份私钥并防止意外丢失。如果它丢失了,它就无法恢复,它所保护的资金也将永远丢失。以太坊私钥的大小2的256次方公钥是椭圆曲线上的一个点,这意味着它是一组满足椭圆曲线方程的 x 和 y 坐标。公钥可以从私钥中计算出来,但私钥不能从公钥中计算出来。哈希散列函数:加密散列函数是一种单向散列函数,可将任意大小的数据映射到固定大小的位串。特性:1)输入可以任意长度,输出是固定长度;2)计算消息的哈希值是有效的(线性复杂度);3)不相关性,输入的微小改动导致输出大不相同,以至它无法与原始消息的散列相关联;4)不可逆性,从消息的哈希值来计算消息是不可行的;5)防碰撞特性,计算两条不同消息而产生相同哈希输出值,应该是不可行的。
以太坊使用 Keccak-256,尽管它在代码中通常称为 SHA-3。以太坊地址是十六进制数字,标识符来自公钥的 Keccak-256 哈希值的最后 20 个字节。nodeJSuse the term “smart contracts” to refer to immutable computer programs that run deterministically in the context of an Ethereum Virtual Machine as part of the Ethereum network protocol
用智能合约这个词代指:作为以太坊网络协议的一部分,在以太坊虚拟机的上下文中确定性运行的不可变计算机程序
Computer programs:智能合约是计算机程序,
immutable:不可变性,一旦部署后,智能合约就无法更改
Deterministic:确定性,智能合约的执行结果对于每个运行它的人都是相同的
EVM context:在以太坊虚拟机的背景下,智能合约在非常有限的执行环境下运行
Decentralized world computer:EVM 在每个以太坊节点上作为本地实例运行
以太坊中的所有智能合约都是由 EOA 发起的交易执行的。智能合约在任何意义上都不是“并行”执行的——以太坊世界的计算机可以被认为是一台单线程机器。
事务的成功终止在不同的场景下有不同的含义:
(1) 如果一笔交易从一个 EOA 发送到另一个 EOA,那么该交易对全局状态(例如账户余额)所做的任何更改都会被记录;
(2) 如果交易从 EOA 发送到不调用任何其他合约的合约,则记录全局状态的任何变化(例如账户余额、合约的状态变量);
(3) 如果交易从 EOA 发送到仅以传播错误的方式调用其他合约的合约,则记录对全局状态的任何更改(例如账户余额、合约的状态变量);
(4) 如果交易从 EOA 发送到合约,该合约以不传播错误的方式调用其他合约,那么记录的全局状态可能只有一些变化(例如,账户余额、非错误合约),而对全局状态的其他更改不被记录(例如错误合约的状态变量)。
否则,如果事务被还原,它的所有影响(状态更改)都会“回滚”,就好像事务从未运行过一样。
合约不能被修改,但是可以“删除”,从其地址中删除所有代码及存储状态,留下一个空白账户;
删除合约,需要执行EVM的 *** 作码:SELFDESTRUCT ,以前叫做SUICIDE。该 *** 作花费“negative gas ”,即gas退款,从而激励网络客户端资源从存储状态的删除中释放。但是执行该 *** 作的前提是合同的编码中有自毁程序这段、程序可访问,否则无法删除。
这个 *** 作不会删除合约的交易历史(过去),因为区块链本身是不可变的。
编程语言可以分为两种广泛的编程范式:声明式和命令式,也分别称为函数式和过程式。
在声明式编程中,编写的函数用来表达程序的逻辑,而不是其流程。例如SQL。命令式编程是程序员编写一组结合程序逻辑和流程的过程,例如java,c++。
solidity版本控制模型,该模型将版本号指定为由点分隔的三个数字:MAJOR.MINOR.PATCH。Solidity 将“次要”编号视为主要版本,将“补丁”编号视为次要版本。因此,在 0.6.4 中,6 被认为是主要版本,4 被认为是次要版本,补丁是0。
Solidity 程序可以包含一个 pragma 指令,该指令指定它兼容的 Solidity 的最小和最大版本,并可用于编译您的合约。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)