Solidity概述及基本代码展示

Solidity是实施智能合约的契约导向的高级语言。它受到C ++,Python和JavaScript的影响,旨在针对以太坊虚拟机(EVM)。

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

您将会看到,可以创建投票,众筹,盲目拍卖,多重签名钱包等等的合约。

 

1 Solidity智能合约例子

我们从一个基础的solidity例子开始。开始的时候,你可能看不懂每一行具体的意思,但是没关系,我们会在后续的讲解中介绍每一个细节。

1
2
3
4
5
6
7
8
9
10
11
pragma solidity ^0.4.0;
contract SimpleStorage {
    uint storedData;
    function set(uint x) {
        storedData = x;
    }
    function get() constant returns (uint) {
        return storedData;
    }
}

第一行告诉该合约用的是0.4.0版本的solidity编写,并且这些代码具有向上兼容性。保证不会在不同solidity编译版本下编译会出现不同的行为。

  从Solidity角度来看,合约就是存在于以太坊区块链中的一个特定地址中的代码和数据集合。uint storedData 声明了一个类型为 uint(256位的无符号整型)的变量,变量名称为 storedData。你可以把它想象为数据库中的一个字段,该字

下面是一个简单的Solidity智能投票系统的代码示例: ```solidity pragma solidity ^0.8.0; contract VotingSystem { // 投票选项 struct Option { uint id; string name; uint voteCount; } // 投票人 struct Voter { bool hasVoted; uint votedOptionId; } Option[] public options; mapping(address => Voter) public voters; // 添加新的投票选项 function addOption(string memory name) public { options.push(Option(options.length, name, 0)); } // 进行投票 function vote(uint optionId) public { require(!voters[msg.sender].hasVoted, "You have already voted."); require(optionId >= 0 && optionId < options.length, "Invalid option."); options[optionId].voteCount++; voters[msg.sender].hasVoted = true; voters[msg.sender].votedOptionId = optionId; } // 获取投票结果 function getResults() public view returns (string memory) { uint winningOptionId = 0; for (uint i = 1; i < options.length; i++) { if (options[i].voteCount > options[winningOptionId].voteCount) { winningOptionId = i; } } return options[winningOptionId].name; } } ``` 这个智能合约定义了两个结构体,一个用于投票选项,一个用于投票人。投票选项包括选项的ID、名称和得票数;投票人包括是否已投票和所投选项的ID。合约还定义了一个选项数组和一个映射,用于存储投票人和他们的投票信息。 合约提供了三个函数:addOption、vote和getResults。addOption用于添加新的投票选项;vote用于进行投票;getResults用于获取投票结果。投票人可以通过调用vote函数来进行投票,传入所选选项的ID即可。最后,调用getResults函数可以获取投票结果,返回得票最多的选项名称。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值