Solidity概述及基本代码展示

尚力财经 134 0

Solidity是一种面向契约的高级语言,用于实现智能契约。受C、Python和JavaScript的影响,针对以太坊虚拟机(EVM)。

Solidity是静态的,支持继承、库和复杂的用户自定义类型等功能。

你会看到你可以为投票、众筹、盲拍、多签名钱包等等创建合同。

1?Solidity智能合约示例

我们先来看一个基本的solidity示例。刚开始,你可能不明白每一行的具体意思,但没关系。我们将在随后的解释中介绍每一个细节。

pragma solidity ^0.4.0;协定简单存储{ uint storedData函数集(uint x){ stored data=x;}函数get()常量returns(uint){ return stored data;} }

的第一行告诉我们契约是用solidity 0 . 4 . 0版本编写的,这些代码是向上兼容的,保证了在不同的solidity编译版本下编译时不会出现不同的行为。

从可靠性的角度来看,合同是以太坊区块链中特定地址存在的代码和数据的集合。uint storedData声明了一个uint(256位无符号整数)类型的变量,变量名为storedData。你可以把它想象成数据库中的一个字段,可以被数据库中的方法查询和修改。

在以太坊中,这个字段属于一个契约字段。在本例中,变量可以通过提供的get和set方法获得或修改。在Solidity中,访问一个变量不需要通过这个引用。

这个契约很简单,只是允许以太坊中的任何人将一个数据存储到一个节点,并将这个操作发布到以太坊。当然以太坊中的其他节点也可以通过调用set方法来修改你已经存储的值。

虽然被修改过,但是这个值的任何操作历史都保存在以太坊中。不用担心丢失自己的存储记录或修改记录。稍后,我们将学习如何限制合同,只允许您修改这些数据。

2?Solidity子货币示例

Pragma solidity 0 . 4 . 0;contract Coin {

//public关键字允许外部访问变量

address public minter;

映射(address=uint)公共余额;

//事件可以让轻客户端快速响应变化

事件发送(地址from,地址to,uint金额);

//构造方法?function Coin(){

minter=msg . sender;}

function mint(地址接收者,uint金额){

if?(msg.sender!=minter)?返回;

余额[接收方]=金额;}

函数send(地址接收者,uint金额){

if?(余额[msg.sender]金额)?返回;balances[msg.sender] -=金额;

余额[接收方]=金额;

已发送(消息.发送者,接收者,金额);}}

接下来的例子将实现一个简单的加密货币例子。无中生有赚钱不再是梦想。当然,只有契约的创建者才有这个特权。此外,任何拥有以太坊密钥对的人都可以进行货币交易,无需注册用户名和密码。这份合同引入了一些新概念。让我们一个一个地看。

Solidity概述及基本代码展示-第1张图片-尚力财经

地址公共minter

声明了address类型的公共状态变量。地址类型是160位值,不允许算术运算。它适用于存储合同地址或其他人的密钥对。Public关键字自动生成外部访问变量值的方法。如果没有声明public,其他契约就不能访问这个变量。自动生成的方法类似于:

Function Minter()Returns(address){ Return Minter;]

当然,如果你加了一个和上面一模一样的方法,就没有效果了。我们需要变量与生成的方法名完全相同。其实编译器会帮我们完成这一块,不需要我们自己写。我们只需要知道这个概念。

映射(address=uint)公共余额;

仍然创建一个公共状态变量,这是一个比address更复杂的数据类型,类似于java中的Map,描述了address和uinit数据类型之间的映射关系。

映射之间的关系可以看作是一个哈希表,所有可能的键对应一个值0。当然,不存在映射中只有键值或者只有值值的情况。所以我们需要记住添加的是什么样的映射关系,或者像这个例子一样如何使用。因为这是一个公共变量,所以系统会自动为它生成一个get方法,类似于:

function 尚力财经小编2022 balances(address _ account)returns(uint){

return balances[_ account];

}

通过上面的方法我们可以很容易的查看一个账户的余额。

发送的事件(发件人地址、收件人地址、金额);

这一行创建了一个名为event的事件。这个事件将在这个例子的最后一行被触发。用户或服务器应用可以以很低的成本(以后的成本是多少)监听事件的触发。一旦这个事件被触发,监听器接收三个参数:from、to、amount。也就是说,从哪个账户,到哪个账户,多少钱。通过这三个参数,可以很容易地跟踪具体的交易。为了监控这个事件,我们需要使用接下来的代码:

Coin。已发送()。手表({},“,函数(错误,结果){if?(!error) {console.log("硬币转账:"?result.args.amount“硬币是从哪里发出的”?result.args.from " to "?result.args.to。");console.log("当前余额: "?"发件人:“?coin . balances . call(result . args . from)" Receiver:"?coin . balances . call(result . args . to));}})

注意?用户如何调用自动生成的余额方法。

币法是一种构造方法,合同生成时由系统调用,不允许事后调用。Msg(以及tx和block)是一个全局变量,它保存了一些可以被区块链访问的属性。它保存创建该协定的节点的地址。Msg.sender是重视此方法的调用者的地址。

最后,真正完成契约功能并被其他用户调用的是mint和send方法。如果mint被创建合同的帐户之外的帐户调用,它将不起任何作用。但是,任何帐户都可以调用send(该帐户必须有以太网货币)并将以太网货币发送到另一个帐户。尚力财经小编2022注意,如果你使用合约将以太币发送到另一个账户,你无法通过区块链浏览器看到任何变化,因为发送以太币的过程和金额的变化都存储在一个专门的以太币合约中。不算在账上。通过使用事件,您可以轻松地创建一个区块链浏览器来查看交易和帐户余额。

感谢HPB团队的组织。

www.shulian.com HPB开发者社区


本文最早出现在王小明的博客

http://Wang Xiaoming . com/

标签: 2022 赚钱

抱歉,评论功能暂时关闭!

微信号已复制,请打开微信添加咨询详情!