长沙建网站,网页制作常用软件,如何做淘宝客有没有免费的网站,南昌网站建设方案服务了解区块链
区块链技术的核心概念是分布式账本#xff0c;它是许多参与者共享的特定类型的数据库。
这个特殊的数据库只是一个交易列表#xff0c;记录着网络中发生的每笔交易。每个人都可以拥有自己的交易列表备份#xff0c;再加上强有力的货币激励措施消除各方之间信任…了解区块链
区块链技术的核心概念是分布式账本它是许多参与者共享的特定类型的数据库。
这个特殊的数据库只是一个交易列表记录着网络中发生的每笔交易。每个人都可以拥有自己的交易列表备份再加上强有力的货币激励措施消除各方之间信任成本。
使用区块链可以把信任放在一个网络中不在需要第三方它通过强有力的激励去规避作弊行为简而言之遵循规则更有利可图。 智能合约
以太坊与比特币很大的不同是以太坊拥有智能合约的概念。 比特币是数字货币-价值存储。 而以太坊不单单是数字货币。 “智能合约”这个名称有点误导。 它不是真正的合约、也不是特别智能它们只是可以区块链上运行代码。
智能合约是以太坊网络上的一种特殊帐户我们有用户帐户还可以拥有智能合约帐户。 用户帐户有:
地址有点像我们的银行帐号 - 比特币也有同样的概念
余额我有多少钱: 以太智能合约账户有
地址
余额有多少钱: 以太
状态
代码状态是智能合约中声明的所有变量和变量的当前状态。 它的工作方式与大多数编程语言中的类中的变量变量相同。 实际上最简单方法去理解智能合约可以类比为一个类实例化对象唯一的区别是这个对象永远存在区块链网络中。
代码是编译后可以在以太坊客户端和节点可以运行的字节码。 它是在创建智能合约时执行的代码它包含我们可以调用的函数。 就像面向对象编程语言中的对象一样。
contract Counter {uint counter;function Counter() public {counter 0;}function count() public {counter counter 1;}
}
上面的代码创建一个智能合约。 代码有一个类型为uint无符号整数 名为“counter” 的变量。 counter变量的内容值就是该合约的状态。 每当我们调用count()函数时此智能合约的区块链状态将增加1这个状态是对任何人都可见的。 以太坊和比特币在交易层面的区别
比特币交易非常简单它只做一件事就是进行交易。 忽略细节这一切都归结为TO谁收钱FROM谁汇款和AMOUNT多少钱。 这让比特币网络中的参与者可以传递价值并存储价值。
以太坊很大的不同是其交易还有一个DATA字段。 DATA字段支持三种类型的交易
价值传递 (和比特币相同)TO 收款地址DATA 留空或留言信息FROM 谁发出AMOUNT 发送多少
创建合约TO 留空 (这就是触发创建智能合约的原因)DATA 包含编译为字节码的智能合约代码FROM 谁创建AMOUNT 可以是零或任何数量的以太它是我们想要给合约的存款。
调用合约函数TO 目标合约账户地址DATA 包含函数名称和参数 - 标识如何调用智能合约函数FROM 谁调用AMOUNT 可以是零或任意数量的以太例如可以支付合约服务费用。以太坊交易
价值传递
{to: 0x687422eEA2cB73B5d3e242bA5456b782919AFc85,value: 0.0005data: ‘0x’ // 也可以附加消息
}非常简单就是转移一定数量的以太到某个地址如果我们愿意也可以向交易添加消息。
创建智能合约
{to: ,value: 0.0data: ‘0x6060604052341561000c57xlb60405160c0806……………’
}TO为空表示创建智能合约DATA包含编译为字节码的智能合约代码。
调用合约方法
{to: 0x687422eEA2cB73B5d3e242bA5456b782919AFc85’, //合约value: 0.0data: ‘0x6060604052341561000c57fe5b60405160c0806……………’
}函数调用信息放在DATA变量中把这个交易信息发送到要调用的智能合约的地址。
关于成本和执行
代码的执行由调用者以称为Gas的方式支付费用。 Gas是运行以太坊虚拟机的燃料。 我们可以将其视为每次执行指令的付款。
Gas 执行费用由网络的矿工他们是运行代码的节点决定。
智能合约是如何运行的
在智能合约上调用函数在很多方面和“正常”编程类似假设我们有一个“MyObject”类型的对象。 该对象有一个名为“myFunction”的函数。 要调用它我们可以简单地引用对象的实例调用哪个函数以及调用它的参数。 像这样
myVariable myObject.myFunction(parameters);如果函数返回任何值则可以把它保存在变量中。
调用智能合约是一回事。 唯一的区别是我们必须将有关调用的信息放入交易中对其进行签名并发送到以太坊网络中执行。
假设想用一些参数调用智能合约“0x0123456”上函数“myFunction”大概包含以下四个步骤 现在当交易被打包放入区块链时状态的改变将反映在整个网络中。
世界计算机
虽然智能合约是图灵完整的理论上可以做任何事情但它们并不适合繁重的计算工作。 合约的计算越多运行它的成本就越高。 合约越复杂就越有可能出现安全漏洞。 智能合约中的安全漏洞是很难修复的因为区块链的不可篡改特性。
智能合约应用Token (通证或代币)
解释一下通证是如何工作的。 那些在ICO中每个人都赞不绝口的代币就是一个智能合约我们自己也可以在以太坊上创建自己的代币。
大多数这些代币都是在以太坊上创建的这个概念非常简单我们需要关注以下几个信息
总供应量
帐号
账户中的金额
代币的流动//通过用户和金额之间的简单映射
MapAccount, Double usersAndTheirMoney;//使用构造函数我们可以在自己的帐户中设置初始供应量或在任意其他中帐户中分配
public Token(Account initialAccount, double initialSupply) {usersAndTheirMoney.put(initialAccount, initialSupply);
}//代币的移动是通过简单的功能完成的只需从一个帐户中减去并添加到另一个帐户
public transfer(Account from, Account to, double amount) {verifySenderOfMoneyIsCaller(from);verifySenderOfMoneyHasEnoughMoney(from, amount);usersAndTheirMoney.put(from, usersAndTheirMoney.get(from)-amount);usersAndTheirMoney.put(to, usersAndTheirMoney.get(to)amount);
}这与我们在以太坊中用于创建通证的完全相同的概念
不过以太坊有自己的编程语言Solidity使用Solidity编写代码大概是这个样子:
contract MyToken {mapping (address uint256) public balances;function MyToken(uint256 initialSupply) {balances[msg.sender] initialSupply;} function transfer(address to, uint256 amount) public {balances[msg.sender] - amount;balances[to] amount;}
}