主页 > imtoken官网地址 > 区块链技术--以太坊(Ethereum)
区块链技术--以太坊(Ethereum)
以太坊项目进一步扩展了区块链网络的能力,从交易延伸到智能合约(Smart Contract)
其官方网站的主页是ethereum.org。
介绍
根据以太坊官方公告,以太坊的目标是建立一个去中心化的智能合约运行平台(Platform for Smart Contract)。 第三方人为干预的可能性。 以太坊平台使用 Golang、C++、Python 等编程语言实现。
当然,为了搭建这个平台,以太坊提供了公链,并开发了一套智能合约的编程语言。 智能合约开发者可以使用官方提供的工具开发支持以太坊区块链协议的应用程序(即所谓的DAPP)。
历史与规划
2014年,以太坊项目启动了众筹计划。
2015年7月完成众筹,募集到价值1800万美元的比特币。 Frontier一期发布,以太坊区块链网络正式上线。
2016年3月以太坊未来100万美金,Homestead二期开始运行(区块号1,150,000),主要提升安全性。
2017年第三季度,大都会发布;
2018年1Q发布Serenity,发布区块链的PoS权益证明(Casper)版本。
特征
以太坊区块链的主要特点包括:
组织安装部署
如果您是以太坊新手,建议使用以下步骤安装部署。
安装Go环境
curl -O https://storage.googleapis.com/golang/go1.5.1.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.5.1.linux-amd64.tar.gz
mkdir -p ~/go; echo "export GOPATH=$HOME/go" >> ~/.bashrc
echo "export PATH=$PATH:$HOME/go/bin:/usr/local/go/bin" >> ~/.bashrc
source ~/.bashrc
安装以太坊
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo add-apt-repository -y ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install ethereum
安装 solc 编译器
sudo add-apt-repository ppa:ethereum/ethereum-qt
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install cpp-ethereum
安装完成后,可以使用geth命令创建以太坊账户
geth account new
Solidity 语言支持
提供在线 Solidity 语言测试。
用户也可以从这里下载包含Solidity运行环境的安装包。
相关工具客户端
提供官方钱包客户端Mist,支持交易,支持直接编写和部署智能合约。
编写的代码编译发布后,即可部署到区块链上。 用户可以通过发送调用相应合约方法的交易以太坊未来100万美金,通过矿工的以太坊虚拟机(EVM)在区块链上执行交易。
以太坊现在有多种语言的客户端,包括:
IDE 网络资源
已经有几个网站提供以太坊网络的数据查看,包括 EthStats.net、EtherNodes.com 等。
协议设计核心概念一致性
目前使用PoW作为共识保证,未来可能会迁移到PoS。
较低的攻击
设计的核心思想是通过经济激励机制来防止少数人作恶:
提高可扩展性
未来,以太坊希望通过分片机制来提高整个网络的可扩展性。 分片前整个网络的处理依赖于单个节点的处理。
分片后,只有同一个分片内的处理是同步一致的,不同分片可以是异步的。
Chaincode 示例 1:Hello World! 简介
smartContract_example01.sol
合约欢迎程序是一个简单的智能合约。 您可以使用此合约与其他人进行交流。 它的回复将与您的输入完全相同。 当输入是“Hello World!”时,合约也会回复“Hello World!” .
目的:
本合约主要面向刚接触solidity和ethereum的初学者。 旨在让大家知道如何编写一个简单的智能合约程序,掌握基本流程。
主要实现以下功能: 第一步通过运行分析main函数代码,生成智能合约代码对象
我们先把合约代码smartContract_example01.sol压缩成一行。 新建一个ssh会话,切换到geth用户环境su - geth,然后输入:cat smartContract_example01.sol | tr '\n' ' '。 切换到以太坊控制台,将合约代码保存为变量:
var greeterSource = 'contract mortal { address owner; function mortal() { owner = msg.sender; } function kill() { if (msg.sender == owner) selfdestruct(owner); } } contract greeter is mortal { string greeting; function greeter(string _greeting) public { greeting = _greeting; } function greet() constant returns (string) { return greeting; } }'
第二步编译合约代码
然后编译合约代码:
var greeterCompiled = web3.eth.compile.solidity(greeterSource)
greeterCompiled.Token.code 可以看到编译后的二进制码 greeterCompiled.Token.info.abiDefinition 可以看到合约的ABI
第三步,设置你要返回的字符串
var _greeting = "Hello World!"
第四步部署合约
接下来,我们需要将编译好的合约部署到网络中。
首先,我们使用 ABI 在 javascript 环境中创建一个合约对象:
var greeterContract = web3.eth.contract(greeterCompiled.greeter.info.abiDefinition);
我们通过合约对象来部署合约:
var greeter = greeterContract.new(_greeting,{from:web3.eth.accounts[0], data: greeterCompiled.greeter.code, gas: 300000}, function(e, contract){
if(!e) {
if(!contract.address) {
console.log("Contract transaction send: TransactionHash: " + contract.transactionHash + " waiting to be mined...");
} else {
console.log("Contract mined! Address: " + contract.address);
console.log(contract);
}
}
})
contract.new 执行时会提示输入钱包密码。 成功执行后,我们的合约 Token 已经广播到网络中。 至此,我们只需要等待矿工将我们的合约打包保存到以太坊区块链中,部署就完成了。
第五步挖矿
在公链上,矿工打包平均需要15秒,但在私链上,需要我们自己来完成。 首先开始挖矿:
miner.start(1)
这时候需要等待一段时间,以太坊节点会生成挖矿所需要的数据,这些数据会保存在内存中。 数据生成后,就会开始挖矿,稍后你可以在控制台输出中看到这样的内容:
...
I0714 22:00:19.694219 ethash.go:291] Generating DAG: 97%
I0714 22:00:22.987934 ethash.go:291] Generating DAG: 98%
I0714 22:00:26.543035 ethash.go:291] Generating DAG: 99%
I0714 22:00:29.912655 ethash.go:291] Generating DAG: 100%
I0714 22:00:29.915580 ethash.go:276] Done generating DAG for epoch 2, it took 5m34.983289765s
步骤 6 停止挖矿(可选)
当DAG生成结束,提示至少挖出一个矿后,我们需要停止挖矿(当然你也可以停止,就是一直输出)
miner.stop()
第七步部署在其他节点上
运行以下代码时,您现在已经成功部署了智能合约:
//由于该命令未改变blockchain,所以不会有任何花费
greeter.greet();
命令行会出现如下返回结果:
'Hello World!'
那么,我们的第一个智能合约程序“Hello World!” 已完成,但目前只有一个节点!
第八步部署在其他节点上
为了让其他人运行你的智能合约,你需要两条信息:
智能合约地址地址智能合约ABI(Application Binary Interface),ABI实际上是一个有序的用户手册,描述了所有方法的名称以及如何调用它们。 我们可以使用以下代码获取其 ABI 和智能合约地址:
greeterCompiled.greeter.info.abiDefinition;
greeter.address;
然后就可以实例化一个JavaScript对象,可以用来在任何联网的机器上调用合约,其中ABI和Address就是上面代码的返回值。
var greeter = eth.contract(ABI).at(Address);
第九步 自毁程序
需要向网络发送交易以支付费用。 自毁程序是对网络的补充,手续费比普通交易小很多。
您可以使用以下代码来检查是否成功。 如果自毁程序运行成功,下面的代码会返回0:
greeter.kill.sendTransaction({from:eth.accounts[0]})
参考
以太坊本地私有链开发环境搭建