区块链基础

区块链作为一个概念对于程序员来说并不难理解。

原因是大多数复杂性(挖掘、散列、椭圆曲线密码学、点对点网络等)只是为了为平台提供一组特定的功能和承诺。

一旦你接受了这些给定的功能,你就不必担心底层技术——或者你是否必须知道亚马逊的 AWS 在内部是如何工作的才能使用它?

Transactions 交易

区块链是一个全球共享的交易数据库。

这意味着每个人都可以通过参与网络来读取数据库中的条目。

如果要更改数据库中的某些内容,则必须创建一个必须被所有其他人接受的所谓事务。

事务一词意味着您要进行的更改(假设您要同时更改两个值)要么根本没有完成,要么完全应用。

此外,当您的事务被应用到数据库时,没有其他事务可以更改它。

例如,想象一个表格,其中列出了电子货币中所有账户的余额。如果请求从一个帐户到另一个帐户的转账,数据库的交易性质确保如果从一个帐户中减去该金额,则始终将其添加到另一个帐户中。如果由于某种原因,无法将金额添加到目标账户,则源账户也不会被修改。

此外,交易始终由发送者(创建者)进行加密签名。这使得保护对数据库的特定修改的访问变得简单。

在电子货币的例子中,一个简单的检查确保只有持有账户密钥的人才能从中转账。

Blocks 块

要克服的一个主要障碍是(用比特币术语)所谓的“双花攻击”:如果网络中存在两个交易都想清空账户会发生什么?只有一个交易可以是有效的,通常是最先被接受的交易。

问题是“第一”在点对点网络中并不是一个客观的术语。

对此的抽象答案是您不必关心。将为您选择全球接受的交易顺序,解决冲突。交易将被捆绑到所谓的“块”中,然后它们将在所有参与节点之间执行和分发。如果两笔交易相互矛盾,则最终成为第二笔的交易将被拒绝,并且不会成为区块的一部分。

这些块在时间上形成一个线性序列,这就是“区块链”这个词的来源。区块以相当固定的间隔添加到链中——对于以太坊来说,这大约是每 17 秒一次。

作为“订单选择机制”(称为“挖矿”)的一部分,可能会不时恢复块,但仅在链的“末端”。在特定块之上添加的块越多,该块被还原的可能性就越小。

因此,您的交易可能会被还原甚至从区块链中删除,但是您等待的时间越长,可能性就越小

注意

交易不能保证包含在下一个区块或任何特定的未来区块中,因为它不取决于交易的提交者,而是由矿工决定交易包含在哪个区块中。

如果您想安排合约的未来调用,您可以使用智能合约自动化工具或预言机服务。

参考资料

https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html#subcurrency-example