分类 区块链 下的文章

区块链目前有多少种虚拟机

区块链目前有多种虚拟机,其中最流行和常用的是以太坊虚拟机(Ethereum Virtual Machine,EVM),其他主要的区块链虚拟机包括NEO虚拟机(NEO Virtual Machine,NeoVM)、EOS虚拟机(EOS Virtual Machine,EVM)和Cardano虚拟机等。不同的区块链平台选择不同的虚拟机,以适应其应用场景和开发要求。

波场用的是什么虚拟机

波场(TRON)使用的是TRON虚拟机(TVM,TRON Virtual Machine)。TVM是TRON生态系统的核心组件,它提供了一种基于Solidity语言的智能合约执行环境,与以太坊虚拟机(EVM)类似,但在性能和资源消耗方面有所优化。TVM的出现,可以帮助开发者更方便地部署智能合约,并且可以支持高性能、高并发的区块链应用场景。

以下是一些当前较为主流的加密货币:

比特币(Bitcoin, BTC):比特币是第一种加密货币,也是最普及的一种加密货币。它以去中心化为核心,使用点对点技术实现交易和发行新的货币单位。

以太坊(Ethereum, ETH):以太坊是最重要的加密货币之一,它不仅是数字货币也是一种智能合约平台。以太坊区块链使用自己的加密货币以太币,也是支持许多 ERC-20 代币和其他分叉硬币的平台。

瑞波币(Ripple, XRP):Ripple是一种实时的毫秒级交易的加密货币,它不同于比特币和以太坊的点对点虚拟货币,由一家叫 Ripple 的公司发行。

比特币现金(Bitcoin Cash, BCH):比特币现金是比特币的一个硬分叉,它的目标是提高区块大小限制,从而提高比特币的交易速度。

Litecoin(LTC):Litecoin是比特币的一个分叉,但独立发展自己的市场。与比特币相比,Litecoin的交易过程更加迅速、更便宜、更加去中心化等等。

编程语言:Solidity
以太坊智能合约的 demo,实现了一个简单的投票系统,具体代码如下:

pragma solidity >=0.4.22 <0.7.0;

contract Voting {

    mapping (bytes32 => uint8) public votesReceived;

    bytes32[] public candidateList;

    constructor(bytes32[] memory candidateNames) public {
        candidateList = candidateNames;
    }

    function totalVotesFor(bytes32 candidate) view public returns (uint8) {
        require(validCandidate(candidate));
        return votesReceived[candidate];
    }

    function voteForCandidate(bytes32 candidate) public {
        require(validCandidate(candidate));
        votesReceived[candidate] += 1;
    }

    function validCandidate(bytes32 candidate) view public returns (bool) {
        for(uint i = 0; i < candidateList.length; i++) {
            if (candidateList[i] == candidate) {
                return true;
            }
        }
        return false;
    }
}

上述智能合约实现了一个简单的投票系统。构造函数用于初始化候选人列表,通过 mapping 映射将候选人名称与其得票数建立关联。通过函数 totalVotesFor 可以返回指定候选人的当选票数,函数 voteForCandidate 可以将某位候选人的得票数加一,函数 validCandidate 用于验证候选人名称是否在候选人列表中。

这只是一个简单的 demo,实际应用的智能合约需要更加完善的逻辑和安全性检查。同时实际开发中还需要考虑 gas 费用、合约存储空间等问题。

Gas费用是以太坊网络中用于支付交易费用的一种计量单位,类似于比特币网络中的交易手续费。Gas本质上是以太坊网络中的计算资源,每一个操作都需要消耗一定的Gas,不同的操作需要消耗不同数量的Gas。例如,一个简单的转账交易需要消耗的Gas费用相对较低,而部署智能合约或执行复杂的智能合约操作需要消耗更多的Gas费用。

以太坊网络中的Gas价格是动态的,由市场供需关系决定,通常以Gwei为单位。Gwei是一种以Ether为基础单位的十亿分之一,因此1 Gwei = 0.000000001 Ether。当用户发起一笔交易时,需要指定所愿意支付的Gas价格(Gwei/Gas),以及愿意支付的Gas数量,这两个参数决定了交易的总费用。如果交易费用太低,可能会导致交易长时间无法被确认;如果交易费用过高,则会浪费用户的资金。

Gas费用的收取主要是为了防止恶意用户利用以太坊网络的计算资源进行攻击,同时也是为了激励矿工验证和打包交易,维护以太坊网络的正常运转。

以太坊区块包含以下属性:

区块头(Block Header):区块头是一个包含区块元数据的数据结构,包括了区块的版本号、难度值、时间戳、区块奖励、上一个区块的哈希值、默克尔根等信息。

交易记录(Transactions):交易记录是指在以太坊网络中发生的所有交易,包括转账交易、部署智能合约、调用智能合约等操作。

祖先区块哈希值(Parent Block Hash):指当前区块的前一个区块的哈希值,用于链接区块链中的每个区块。

默克尔根(Merkle Root):指区块中所有交易记录的哈希值所构成的默克尔树的根节点哈希值,用于验证区块中交易的完整性。

随机数(Nonce):是一个32位的随机数,用于挖矿计算区块的哈希值。

区块哈希值(Block Hash):是指整个区块的哈希值,由区块头和交易记录共同组成,用于验证区块的唯一性和完整性。

总之,以太坊区块包含区块头、交易记录、祖先区块哈希值、默克尔根、随机数和区块哈希值等属性,这些属性共同构成了以太坊区块链的数据结构。