以太坊_以太坊挖矿 - CSDN
以太坊 订阅
以太坊(英文Ethereum)是一个开源的有智能合约功能的公共区块链平台,通过其专用加密货币以太币(Ether,简称“ETH”)提供去中心化的以太虚拟机(Ethereum Virtual Machine)来处理点对点合约。以太坊的概念首次在2013至2014年间由程序员Vitalik Buterin受比特币启发后提出,大意为“下一代加密货币与去中心化应用平台”,在2014年通过ICO众筹开始得以发展。截至2018年2月,以太币是市值第二高的加密货币,仅次于比特币。 展开全文
以太坊(英文Ethereum)是一个开源的有智能合约功能的公共区块链平台,通过其专用加密货币以太币(Ether,简称“ETH”)提供去中心化的以太虚拟机(Ethereum Virtual Machine)来处理点对点合约。以太坊的概念首次在2013至2014年间由程序员Vitalik Buterin受比特币启发后提出,大意为“下一代加密货币与去中心化应用平台”,在2014年通过ICO众筹开始得以发展。截至2018年2月,以太币是市值第二高的加密货币,仅次于比特币。
信息
创始人
杰弗里•维尔克
外文名
Ethereum
中文名
以太坊
属    性
平台
以太坊产生背景
比特币开创了去中心化密码货币的先河,五年多的时间充分 检验了区块链技术的可行性和安全性。比特币的区块链事实上是一套分布式的数据库,如果再在其中加进一个符号——比特币,并规定一套协议使得这个符号可以在数据库上安全地转移,并且无需信任第三方,这些特征的组合完美地构造了一个货币传输体系——比特币网络。然而比特币并不完美,其中协议的扩展性是一项不足,例如比特币网络里只有一种符号——比特币,用户无法自定义另外的符号,这些符号可以是代表公司的股票,或者是债务凭证等,这就损失了一些功能。另外,比特币协议里使用了一套基于堆栈的脚本语言,这语言虽然具有一定灵活性,使得像多重签名这样的功能得以实现,然而却不足以构建更高级的应用,例如去中心化交易所等。以太坊从设计上就是为了解决比特币扩展性不足的问题。
收起全文
精华内容
参与话题
  • 以太坊系列(一)之以太坊简介

    千次阅读 2018-08-11 18:58:34
    1. 以太坊的介绍 以太坊是一个开放的区块链平台,允许任何人在平台中建立和使用通过区块链技术运行的去中心化应用,同比特币一样,以太坊由全球范围的很多人共同创建,不受任何个人控制。 2. 下一代区块链 ...

    本文个人博客地址:http://www.huweihuang.com/article/ethereum/ethereum-introduction/

    1. 以太坊的介绍

    以太坊是一个开放的区块链平台,允许任何人在平台中建立和使用通过区块链技术运行的去中心化应用,同比特币一样,以太坊由全球范围的很多人共同创建,不受任何个人控制。

    2. 下一代区块链

    区块链技术是比特币的底层技术。在比特币中,分布式数据库被设想为一个账户余额表(总账),交易通过比特币的转移来实现个体之间无需信任基础的金融活动。以太坊试图实现一个总体上完全无需信任基础的智能合约平台。

    3. 以太坊虚拟机

    以太坊是可编程的区块链,不会给用户一系列预先设置好的操作,允许用户自定义复杂的操作。以太坊狭义上是指一系列定义去中心化应用平台的协议,核心是以太坊虚拟机(EVM),其可以执行任意复杂算法的编码。以太坊是图灵完备的。

    以太坊也有一个点对点的网络协议,以太坊区块链数据库由各网络节点来维护和更新,每个节点运行以太坊虚拟机并执行相同的指令,保证区块链的一致性。

    4. 以太坊工作原理

    比特币可以看作是关于交易的列表,而以太坊的基础单元是账户。以太坊跟踪每个账户的状态,以太坊上所有状态转换都是账户之间价值和信息的转换。

    账户分为两类:

    • 外部账户(EOA):由私人密钥控制
    • 合约账户:由合约代码控制,只能由外部账户“激活”。

    智能合约:指合约账户中的编码,即交易被发送给该账户时所运行的程序。用户可以通过在区块链中部署编码来创建新的合约。

    只有当外部账户发出指令时,合约账户才会执行相应的操作,是为了保证正确执行所有操作。

    和比特币一样,以太坊用户需要向网络支付少量的交易费用,通过以太币的形式支付。这样避免受到类似DDos的攻击。

    交易费用由节点收集,节点使网络生效。“矿工”就是以太坊网络中收集、传播、确认和执行交易的节点。矿工将交易打包,打包的数据成为区块,打包的过程就是将以太坊中账户的状态更新的过程。矿工们相互竞争挖矿,成功挖矿的可以得到以太币的奖励。

    参考:

    展开全文
  • 区块链基础和以太坊入门

    千人学习 2019-12-19 10:39:02
    孟岩老师从比特币入手,深入分析区块链的基本原理和知识,在此基础上拨云见日地带领学员入门以太坊,让学员迅速掌握发币、转账、挖矿的基本步骤和技能。
  • 课程介绍: 比特币提供了区块链技术应用的原型,但是比特币系统的初衷只是...本套视频我们还会学习如何搭建以太坊私链、如何开发以太坊钱包,如何发行ERC20标准的Token,以及以太坊开发集成环境truffle的用法。
  • 一、区块链 1. 分布式去中心化 比特币设计的初衷就是要避免依赖中心化的机构,没有发行机构,也不可能操纵发行数量。既然没有中心化的信用机构,在电子货币运行的过程中,也势必需要一种机制来认可运行在区块链...

    一、区块链

    1. 分布式去中心化

    比特币设计的初衷就是要避免依赖中心化的机构,没有发行机构,也不可能操纵发行数量。既然没有中心化的信用机构,在电子货币运行的过程中,也势必需要一种机制来认可运行在区块链上的行为(包括比特币的运营,亦或是运行在区块链上的其他业务),这种机制就是共识机制。在完全去中心化的区块链上运行的比特币,采用的是PoW(Proof of Work,工作量证明),该机制完美的解决了拜占庭将军问题(存在异常的情况下仍能达成一致)。因为基础网络架构为分布式,对单独一个节点是无法控制或破坏整个网络,掌握网内51%的运算能力(非节点数)才有可能操作交易,而这个代价大概要超过270亿美元。

    2. 无须信任

    整个区块链网络中的数据是公开透明的,每个节点(参与者)都可自由加入该网络中,下载到所有的数据。任意两个节点间的数据交换无需互相信任,完全依靠区块链中的交易历史和数据的可追溯,以及共识机制来保证数据交换的正确且不可逆的执行。

    3. 不可篡改和加密安全性

    跟当前银行网银系统(特别是公司网银系统)的加密机制类似,区块链的数据结构和交易流程中大量的使用了公私钥来加解密,保证数据的安全性。基于该技术基础,甚至可以应用群组签名来保证共有数据的安全性。任何事物既然有优点,也同时会存在不足之处。根源于分布式网络架构和共识机制,在区块链上运行的交易确认时间会比较长(比特币的确认时间大概是15分钟),交易并发数受限(比特币的每秒交易数为7笔,而淘宝的每秒并发数能达到10万左右),区块的容量限制(当前为1M,区块链的扩容一直在讨论中),监管难以介入,基于工作量证明的共识机制存在浪费系统资源和带宽的问题。

    4. 区块链技术

    a. 区块

    区块是一个包含在区块链(公开账簿)里的聚合了交易信息的容器。它由一个包含元数据的区块头和紧跟其后的构成区块主体的一长串交易组成。区块头是80字节,而平均每个交易至少是250字节,而且平均每个区块至少包含超过500个交易。
    区块结构如下图

    交易(Tx)详情中的结构如下图

    b. 区块链

    当一个节点从网络接受到传入的区块时,它会验证这些区块,然后链接到现有的区块链上,链接的形态如下图:

    由于每个区块包含前一个区块的HASH值,这就使得从创世块到当前块形成了一条块链,每个区块必定按时间顺序跟随在前一个区块之后,因为如果不知道前一块区块的HASH值就没法生成当前区块。要改变一个已经在块链中存在一段时间的区块,从计算上来说是不可行的,因为如果它被改变,它之后的每个区块必须随之改变。这些特性使得双花比特币非常困难,区块链是比特币的最大创新。

    5. 比特币钱包

    a. 比特币钱包的生成

    1. 首先使用随机数发生器生成一个 私钥 。一般来说这是一个256bits的数,拥有了这串数字就可以对相应 钱包地址 中的比特币进行操作,所以必须被安全地保存起来。
    2. 私钥经过SECP256K1算法处理生成了公钥。SECP256K1是一种椭圆曲线算法,通过一个已知私钥时可以算得公钥,而公钥已知时却无法反向计算出私钥。这是保障比特币安全的算法基础。
    3. 同SHA256一样,RIPEMD160也是一种Hash算法,由公钥可以计算得到公钥哈希,而反过来是行不通的。
    4. 将一个字节的地址版本号连接到公钥哈希头部(对于比特币网络的pubkey地址,这一字节为“0”),然后对其进行两次SHA256运算,将结果的前4字节作为公钥哈希的校验值,连接在其尾部。
    5. 将上一步结果使用BASE58进行编码(比特币定制版本),就得到了钱包地址。

    流程图如下

    b .转账

    比特币钱包间的转账是通过交易(Transaction)实现的。交易数据是由转出钱包私钥的所有者生成,也就是说有了私钥就可以花费该钱包的比特币余额。生成交易的过程如下:

    1. 交易的原始数据包括“转账数额”和“转入钱包地址”,但是仅有这些是不够的,因为无法证明交易的生成者对“转出钱包地址”余额有动用的权利。所以需要用私钥对原始数据进行签名。
    2. 生成“转出钱包公钥”,这一过程与生成钱包地址的第2步是一样的。
    3. 将“转出签名”和“转出公钥”添加到原始交易数据中,生成了正式的交易数据,这样它就可以被广播到比特币网络进行转账了。

    二、以太坊Ethereum

    1. 概念

    a. 什么是以太坊

    简单来说,以太坊是一种新的法律形式。现行法律的本质是一种合约。它是由(生活于某一社群的)人和他们的领导者之间所缔结的,一种关于彼此该如何行动的共识。个体之间也存在着一些合约,这些合约可以理解为一种私法,相应的,这种私法仅对合约的参与者生效。

    例如,你和一个人订立合约,借给他一笔钱,但他最后毁约了,不打算还这笔钱。此时你多半会将对方告上法庭。在现实生活中,打官司这种事情常常混乱不堪并且充满了不确定性。将对方告上法庭,也通常意味着你需要支付高昂的费用聘请律师,来帮你在法庭上针对法律条文展开辩论,而且这一过程一般都旷日持久。而且,即使你最终赢了官司,你依然可能会遇到问题(比如,对方拒不执行法庭判决)。
    令人欣慰的是,当初你和借款人把条款写了下来,订立了合约。但法律的制定者和合约的起草者们都必须面对一个不容忽视的挑战:那就是,理想情况下,法律或者合约的内容应该是明确而没有歧义的,但现行的法律和合约都是由语句构成的,而语句,则是出了名的充满歧义。
    因此,一直以来,现行的法律体系都存在着两个巨大的问题:首先,合约或法律是由充满歧义的语句定义的,第二,强制执行合约或法律的代价非常大。
    而以太坊,通过数字货币和编程语言的结合,解决了现行法律体系的这两大问题。
    以太坊系统自身带有一种叫做以太币(Ether)的数字货币。以太币和著名的数字货币比特币(Bitcoin)有着非常多的相似之处。两者均为数字储值货币,且无法伪造,都以去中心化的方式运行来保证货币供应不被某一方所控制。两者都可以像电子邮件一样,作为货币自由地在全世界流通。而且,由于它们可以做到传统货币做不到的事情,因此用户对它们未来的价值充满期待 。

    另外
    1.详情请阅读以太坊白皮书 (中文英文)。
    2.以太坊教程

    b. 基本知识

    • 公钥加密系统。 Alice有一把公钥和一把私钥。她可以用她的私钥创建数字签名,而Bob可以用她的公钥来验证这个签名确实是用Alice的私钥创建的,也就是说,确实是Alice的签名。当你创建一个以太坊或者比特币钱包的时候,那长长的0xdf…5f地址实质上是个公钥,对应的私钥保存某处。类似于Coinbase的在线钱包可以帮你保管私钥,你也可以自己保管。如果你弄丢了存有资金的钱包的私钥,你就等于永远失去了那笔资金,因此你最好对私钥做好备份。
    • 点对点网络。 就像BitTorrent, 以太坊分布式网络中的所有节点都地位平等,没有中心服务器。
    • 区块链。 区块链就像是一个全球唯一的帐簿,或者说是数据库,记录了网络中所有交易历史。
    • 以太坊虚拟机(EVM)。 它让你能在以太坊上写出更强大的程序(比特币上也可以写脚本程序)。它有时也用来指以太坊区块链,负责执行智能合约以及一切。
    • 节点。 你可以运行节点,通过它读写以太坊区块链,也即使用以太坊虚拟机。完全节点需要下载整个区块链。轻节点仍在开发中。
    • 矿工。 挖矿,也就是处理区块链上的区块的节点。这个网页可以看到当前活跃的一部分以太坊矿工:stats.ethdev.com。
    • 工作量证明。 矿工们总是在竞争解决一些数学问题。第一个解出答案的(算出下一个区块)将获得以太币作为奖励。然后所有节点都更新自己的区块链。所有想要算出下一个区块的矿工都有与其他节点保持同步,并且维护同一个区块链的动力,因此整个网络总是能达成共识。(注意:以太坊正计划转向没有矿工的权益证明系统(POS),不过那不在本文讨论范围之内。)
    • 以太币。 缩写ETH。一种你可以购买和使用的真正的数字货币。这里是可以交易以太币的其中一家交易所的走势图。在写这篇文章的时候,1个以太币价值65美分。
    • Gas. 在以太坊上执行程序以及保存数据都要消耗一定量的以太币,Gas是以太币转换而成。这个机制用来保证效率。
    • DApp. 以太坊社区把基于智能合约的应用称为去中心化的应用程序(Decentralized App)。DApp的目标是(或者应该是)让你的智能合约有一个友好的界面,外加一些额外的东西,例如IPFS(可以存储和读取数据的去中心化网络,不是出自以太坊团队但有类似的精神)。DApp可以跑在一台能与以太坊节点交互的中心化服务器上,也可以跑在任意一个以太坊平等节点上。这里分享一个以太坊DApp教程,可以高效的学习如何开发一个DApp,很适合入门。

    2. 工作流程

    a. 环境搭建

    建议使用Mac OS环境,不然可能会出现各种坑。

    1. 安装NodeJS,安装Python
    2. 安装testrpc(测试环境中使用),安装go-ethereum(真实环境中使用)。
    3. 安装solc
    4. 安装truffle

    如果是windows的话建议用工具ethbox可以一键安装以太坊开发环境的工具: ethbox

    b. Solidity语言简介

    下面是官网上面的一段关于智能投票合约的示例代码

      contract Ballot {
       //一个选民的构造体
        struct Voter {
            uint weight; // 权重(即他可以投几票)
            bool voted;  //是否已经投过票
            address delegate; // 代表地址(他可以代表某个人进行投票)
            uint vote;   // index of the voted proposal
        }
    
        // 投票的提案的构造体
        struct Proposal
        {
            bytes32 name;   // 提案名称
            uint voteCount; //获得的票数
        }
    
        address public chairperson;//会议主席
    
        //地址 -选民 的map
        mapping(address => Voter) public voters;
    
        // 投票种类的动态数组
        Proposal[] public proposals;
    
        ///构造函数
        function Ballot(bytes32[] proposalNames) {
            chairperson = msg.sender;//初始化会议主席
            voters[chairperson].weight = 1;
    
           //初始化所有的提案
            for (uint i = 0; i < proposalNames.length; i++) {
    
                proposals.push(Proposal({
                    name: proposalNames[i],
                    voteCount: 0
                }));
            }
        }
    
        // 给予投票权
        function giveRightToVote(address voter) returns (bool b) {
            if (msg.sender != chairperson || voters[voter].voted) {
                //对于会议主席和已经投过票的选民这里不处理
                return false;;
            }
            voters[voter].weight = 1;
            return true;
        }
    
        /// 投票权转移函数
        function delegate(address to) {
            // 投票权转移的发起人
            Voter sender = voters[msg.sender];
            if (sender.voted)
                throw;
    
          //递归找到没有转移投票权的  选民
            while (
                voters[to].delegate != address(0) &&
                voters[to].delegate != msg.sender
            ) {
                to = voters[to].delegate;
            }
    
            if (to == msg.sender) {
                throw;
            }
    
           //将发起人设置为已经投过票的状态
            sender.voted = true;
            //将代表设置为刚才递归获取的选民
            sender.delegate = to;
            Voter delegate = voters[to];
            if (delegate.voted) {
                //如果代表已经投过票就在他投票的提案的票数增加
                proposals[delegate.vote].voteCount += sender.weight;
            }
            else {
               //将代表的的票数增加
                delegate.weight += sender.weight;
            }
        }
    
        /// 投票函数
        function vote(uint proposal) {
            Voter sender = voters[msg.sender];
            if (sender.voted)
                throw;
            sender.voted = true;
            sender.vote = proposal;
    
            //将投的提案票数增加
            proposals[proposal].voteCount += sender.weight;
        }
    
        ///获得票数最多的提案
        function winningProposal() constant
                returns (uint winningProposal)
        {
            uint winningVoteCount = 0;
            for (uint p = 0; p < proposals.length; p++) {
                if (proposals[p].voteCount > winningVoteCount) {
                    winningVoteCount = proposals[p].voteCount;
                    winningProposal = p;
                }
            }
        }
    }
    

    解读

    • address. 地址类型。chairperson是会议主席的钱包地址。这个地址会在合约的构造函数function Ballot()中被赋值。很多时候也称呼这种地址为’owner’(所有人)。
    • public. 这个关键字表明变量可以被合约之外的对象使用。private修饰符则表示变量只能被本合约(或者衍生合约)内的对象使用。如果你想要在测试中通过web3.js使用合约中的某个变量,记得把它声明为public。
    • Mapping或数组。mapping(address => Voter)为选民钱包地址和选民构造体的键值对。Proposal[] public proposals是一个提案构造体的数组。
    • 有特殊的变量和函数总是在全局命名空间存在,主要用于提供有关blockchain信息,例如msg,block,tx,其中msg.sender为发起人的地址。

    solidity语言更深入的理解可以阅读官方文档

    c. 使用geth部署合约

    1. 启动一个测试节点

    geth –testnet –fast –cache=512 –genesis CustomGenesis.json console

    这里的CustomGenesis.json是为了给测试的账户分配以太币

    {
        "coinbase": "0x0000000000000000000000000000000000000000",
        "difficulty": "0x20000",
        "extraData": "",
        "gasLimit": "0x2fefd8",
        "nonce": "0x0000000000000042",
        "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "timestamp": "0x00",
        "alloc": {
            "0xe49c283bc6bf92c5833cc981b97679238dd3b5da": {
                "balance": "111111111000000000000000000000000000"
            },
            "0xd8927c296b3ebe454a6409770a0c323ec4ed23ba": {
                "balance": "222222222000000000000000000000000000"
            }
        }
    }
    

    solc下的内容要替换成你的测试账户地址。具体geth的用法请查看官方文档源码介绍

    1. 使用solc编译智能合约,获得二进制代码
      例如以下代码
    contract test { 
          function multiply(uint a) returns(uint d) { 
                 return a * 7; 
          }
    }
    

    在geth中输入

    source = “contract test { function multiply(uint a) returns(uint d) { return a * 7; } }”

    clientContract = eth.compile.solidity(source).test

    编译返回的结果的JSON格式如下

    其中,

    • code:编译后的EVM字节码
    • info:编译器返回的metadata
    • abiDefination:Application Binary Interface定义。具体接口规则参见这里
    • compilerVersion:编译此代码的solidity编译器版本
    • developerDoc:针对开发者的Natural Specification Format,类似于Doxygen
    • language:合约语言
    • languageVersion:合约语言版本
    • source:源代码
    • userDoc:针对用户的Ethereum的Natural Specification Format。

    编译器返回的JSON结构反映了合约部署的两种不同的路径。info信息真实的存在于区中心化的云中,作为metadata信息来公开验证Blockchain中合约代码的实现。而code信息通过创建交易的方式部署到区块链中。

    1. 使用solc编译智能合约,获得二进制代码
      部署合约前,确保你有一个解锁的账户并且账户中有余额,因为部署合约得过程中会消耗以太币。输入web3.fromWei(eth.getBalance(eth.accounts[0]),”ether”)可以查看账户余额。
      解锁一个账户

    personal.unlockAccount(eth.accounts[0])

    获得账户

    primaryAddress = eth.accounts[0]

    定义一个abi (abi是个js的数组,否则不成功)

    abi = [{ constant: false, inputs: [{ name: ‘a’, type: ‘uint256’ } ]}]

    创建智能合约

    MyContract = eth.contract(abi)

    发送交易部署合约

    contract = MyContract.new({from: primaryAddress, data:”0x6060604052602a8060106000396000f3606060405260e060020a6000350463c6888fa18114601a575b005b6007600435026060908152602090f3”})

    如果交易被pending,如图说明你的miner没有在挖矿

    启动一个矿工
    miner.setEtherbase(eth.primaryAddress) //设定开采账户
    miner.start(8)

    eth.getBlock(“pending”, true).transactions
    这时候发现交易已经在区块中

    不过会发现,交易还是pending,这是因为该交易区块没有人协助进行运算验证,这时候只需要再启动一个矿工就行了
    miner.start(8)

    1. 与合约进行交互

    Multiply7 = eth.contract(clientContract.info.abiDefinition);
    var myMultiply7 = Multiply7.at(contract.address);
    myMultiply7.multiply.call(3)

    myMultiply7.multiply.sendTransaction(3, {from: contract.address})

    d. 使用truffle框架

    使用truffle部署智能合约的步骤:

    1. truffle init (在新目录中) => 创建truffle项目目录结构,
    2. 编写合约代码,保存到contracts/YourContractName.sol文件。
      例如Ballot .sol,此时要找到migrations文件夹,在deploy_contracts.js文件中添加deployer.deploy(Ballot);
    3. truffile compile 编译合约代码。
    4. 启动以太坊节点(例如在另一个终端里面运行testrpc)。
    5. truffle migrate(在truffle项目目录中)。

    1. 编写单元测试

    test文件夹中新建ballot.js文件

    contract('Ballot'function(accounts)){
        //accounts是所以账户得数值
        it("获取投票权"function(){
            var meta = Ballot.deployed();
            return meta.giveRightToVote(accounts[1]).then(function(b){
               assert.equal(Boolean(b),true,"获取投票权失败");
            });
        });
    
    }
    

    在项目根目录下运行truffle test,你应该看到测试通过,如果使用自己构造的ballot对象,可以这样写:

    contract('Ballot'function(accounts)){
        //accounts是所以账户得数值
        it("获取投票权"function(){
           var proposals = [];
           proposals.push("proposal0");
           Ballot.new(proposals).then(function(meta){
               return meta.giveRightToVote(accounts[1]).then(function(b){
                   assert.equal(Boolean(b),true,"获取投票权失败");
                });
           });
    
        });
    
    }
    
    • 合约中发送以太币。 this是合约实例的地址,以变接下来检查这个地址的余额(或者直接使用this.balance)
    • 当你通过web3.js调用交易函数时(使用web3.eth.sendTransaction),交易并不会立即执行。事实上交易会被提交到矿工网络中,交易代码直到其中一位矿工产生一个新区块把交易记录进区块链之后才执行。因此你必须等交易进入区块链并且同步回本地节点之后才能验证交易执行的结果。用testrpc的时候可能看上去是实时的,因为测试环境很快,但是正式网络会比较慢。
    • Gas. (译注:以太坊上的燃料,因为代码的执行必须消耗Gas。直译为汽油比较突兀,故保留原文做专有名词。)直到现在我们都没有涉及Gas的概念,因为在使用testrpc时通常不需要显式的设置。当你转向geth和正式网络时会需要。在交易函数调用中可以在{ from: , value: , gas: _ } 对象内设置Gas参数。Web3.js提供了web3.eth.gasPrice调用来获取当前Gas的价格,Solidity编译器也提供了一个参数让你可以从命令行获取合约的Gas开销概要:solc –gas YouContract.sol.

    2. 为合约创建一个界面

    app目录中,可以编写自己的html和js文件,js与智能合约的交互与单元测试基本一致,例如一个界面上有一个输入框和一个按钮,获得选民的投票权。

    <!DOCTYPE html>
    <html>
    <head>
      <title>Ballot App</title>
      <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>
      <link href="./app.css" rel='stylesheet' type='text/css'>
      <script src="./app.js"></script>
    </head>
    <body>
      <h1>Ballot</h1>
      <h2>Example Truffle Dapp</h2>
    
      <br>
      <h1>Send</h1>
      <br><label for="amount">Account:</label><input type="text" id="account" placeholder="e.g., 0x453468394hdfg84858345348"></input>
    
      <br><br><button id="getRightVote" onclick="getRight()">Get Right Vote</button>
      <br><br>
      <span id="status"></span>
    </body>
    </html>
    

    app.js中的代码为

    function getRight() {
     var account = document.getElementById("account").value;
      var meta = Ballot.deployed();
    
       meta.giveRightToVote(account).then(function(b){
            if(Boolean(b)){
              setStatus("Get Right Vote Success");
            }else{
              setStatus("Get Right Vote Error");
            }
      }).catch(function(e){
        setStatus("Get Right Vote Error");
        console.log(e);
      });
    
    };
    

    另外分享几个教程给大家:

    • python以太坊,主要是针对python围绕web3.py进行区块链以太坊应用开发的讲解。
    • web3j,主要是针对java和android程序员围绕web3j库进行区块链以太坊开发的讲解。
    • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。
    • 以太坊开发,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
    • 以太坊教程,主要介绍智能合约与dapp应用开发,适合入门。
    • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和事件等。
    展开全文
  • 3.4 以太坊以太坊架构详解

    千次阅读 2018-11-20 14:11:17
    1.以太坊总体架构  以太坊详细架构  账户设计  外部账户:一般意义上的账户 合约账户:它是一种可编程的账户,合约存在以太坊的区块链上,它是代码和数据的集合。合约受代码控制并由外部所有账户激活 ...

    1.以太坊总体架构 

    1. 以太坊详细架构 
      1. 账户设计 
        1. 外部账户:一般意义上的账户
        2. 合约账户:它是一种可编程的账户,合约存在以太坊的区块链上,它是代码和数据的集合。合约受代码控制并由外部所有账户激活
        3. 在以太坊中,区块链被作为一个通用的管理对象状态转换的去中心化平台,账户就是有状态的对象。外部所有账户的状态就是余额,而合约账户的状态可以是余额、代码执行情况,以及合约的存储。以太坊网络的状态就是所有账户的状态,该状态由每个区块的交易来更新,同时需要在全网形成共识。用户和以太坊的交互需要通过对账户的交易来实现。
        4. 以太坊外部账户由公、私钥对定义。地址是公钥的后20位
        5. 密钥文件存储在以太坊的数据目录中的keystore目录下面
        6. 合约账户可以执行图录完备的计算任务,也可以在合约账户之间传递消息,合约编译成以太坊虚拟机字节码,记录在区块链上面 。
      2. 区块链设计 
        1. 以太坊区块链的每个区块不仅保存着交易清单,还保存着最新的状态。
        2. 以太坊的状态包含了一个键值表,键是地址(address),值是账户里声明的所有变量,包括余额,随机数,代码和账户的存储(存储也是以一颗树的形式来组织)
        3. 对于以太坊的Merkel-Patricia树,键被编码成向下访问树的
        4. 在以太坊区块链的区块报文头中,存放了3个根哈希:Merkel根哈希值,状态的根哈希值,收据的根哈希值
      3. POW机制 
        1. 以太坊的POW算法叫做Ethash算法,该算法主要寻找一个随机数作为输入,使得运算结果小于一个特定的难度门槛。
        2. 以太坊通过动态调节难度来达到平均15秒在全网中找到一个新的区块。每15秒的“心跳”基本上是全网更新系统状态的节奏,并保证当攻击者的计算能力不超过全网计算能力的一半时,攻击者无法改写交易记录或进行分叉。
        3. 以太坊的POW中加入了内存难度,使得仅仅依靠算力来进行挖矿的方式行不通
        4. 叔区块:批符合难度条件,但是区块里的交易不被确认的区块。
        5. 每个区块最多能链接两个叔区块
      4. 计算和图录完备 
        1. 以太坊的计算环境是图录完备的
      5. EVM高级语言 
        1. Solidity
        2. Serpent
        3. LLL
      6. 以太坊P2P网络 
        1. RLPx协议 
          1. 以太坊网络节点间的通信采用P2P线上协议。节点间采用RLPx编码及认证的通信传输协议来传输消息包,即提供 发送和接收消息的协议功能。
          2. 节点可以自由的在任何TCP商品发布和接受连接,默认的商品是30303.
          3. 正式版RLPx功能如下: 
            1. 单一协议的UDP节点发现
            2. ECDSA签名的UDP
            3. 加密握手、认证
            4. 节点持久性
            5. 加密/认证TCP
            6. TCP帧处理
          4. P2P节点采用RLPx的发现协议DHT来实现邻节点的发现。
          5. RLP(递归长度前缀):将二进制的数据进行任意嵌套的数组编码。在以太坊中,RLP是对对象编码的主要方法
        2. Whisper协议 
          1. 它是DAPP之间通信的通信协议。
          2. Whisper结合了DHT和数据包消息系统(如UDP),因此同时具有两种协议的特性。
          3. Whisper是一个线标志的消息系统,提供了一个低层次但又简易使用的API,不需要记忆底层的硬件属性。
          4. Whisper提供多索引,非单一的记录,也就是说同一个记录可以有多个键,不同键之间的记录可能是一样的
          5. Whisper是为需要大规模的多对多数据发现,信号谈判,最少的传输通信,完全的隐私保护的下一代DAPP而设计的
          6. 使用场景 
            1. DAPP需要把少量的信息发送出去,而这些发布的消息需要保留相当一段时间
            2. DAPP需要把信号发给其它的DAPP,希望他们参与对某个交易的协同
            3. DAPP之间需要提供非实时的提示或通信
            4. DAPP需要提供暗通信,也就是通信双方除了知道对方的哈希值之外,不知道对方更多的底细。
      7. 事件 
        1. 以太坊中的事件是一个以太坊日志和事件监测协议的抽象 。
        2. 日志记录提供合约的地址
        3. 事件则利用现有的ABI功能来解析日志记录。

     

    展开全文
  • 以太坊是什么?

    2019-05-24 10:32:08
    在您了解以太坊之前,先了解互联网有助于您。 今天,咱们的个人数据,暗码和财务信息都存储在其他人的核算机上 - 云核算和亚马逊,Facebook或Google等公司拥有的服务器上。即便这篇CoinDesk文章也存储在一家公司操控...

    链客,专为开发者而生,有问必答!

    此文章来自链客区块链技术问答社区,未经允许拒绝转载。
    在这里插入图片描述

    在您了解以太坊之前,先了解互联网有助于您。

    今天,咱们的个人数据,暗码和财务信息都存储在其他人的核算机上 - 云核算和亚马逊,Facebook或Google等公司拥有的服务器上。即便这篇CoinDesk文章也存储在一家公司操控的服务器上,公司应该担任保存这些数据。

    这种设置有许多便利,由于这些公司会布置专家团队来协助存储和保护这些数据,并消除保管和正常运转时间带来的本钱。

    但是有了这种便利,也存在缝隙。正如咱们所知道的,黑客或政府或许会在您不知情的情况下,通过影响或攻击第三方服务而获得不受欢迎的访问权 - 这意味着他们能够盗取,走漏或更改重要信息。

    Apache Web服务器的创建者Brian Behlendorf甚至将这个集中式设计称为互联网的“原罪”。像Behlendorf的一些人以为,互联网总是意味着分散化,并且围绕着使用包含区块链技能在内的新工具展开分化运动来协助完成这一目标。

    以太坊是加入这一运动的最新技能之一。

    尽管比特币旨在损坏贝宝和网上银行业务,但以太坊的目标是使用区块链替代互联网第三方 - 存储数据,转让抵押借款和追踪杂乱金融工具的第三方。

    “国际核算机”

    简而言之,以太坊想成为一个’国际核算机’,将分散 - 有些人会以为,民主化 - 现有的客户端 - 服务器模型。

    随着以太坊,服务器和云被全球数千个由志愿者运转的所谓“节点”所替代(从而形成“国际核算机”)。

    咱们的愿景是,以太坊能够为全球任何地方的人们供给相同的功用,使他们能够在这个基础设施之上供给服务。

    例如,在一个典型的应用程序商店中翻滚,您会看到各种彩色方块,代表从银行到健身到消息应用程序的全部内容。这些应用程序依托公司(或其他第三方服务)存储您的信用卡信息,购买历史记录和其他个人数据 - 一般位于第三方操控的服务器中。

    您挑选的应用程序当然也受第三方办理,由于Apple和Google会保护并策划(或在某些情况下,检查)您能够下载的特定应用程序。

    以Evernote或Google Docs等在线文档服务为例。1

    以太坊假如全部按计划进行,都会将这些类型服务中的数据归还给其全部者,并赋予其作者创造权。

    这个主意是,一个实体将不再操控你的笔记,没有人能够忽然制止该应用程序自身,暂时将全部的笔记本电脑都离线。只有用户能够进行更改,而不是任何其他实体。

    理论上,它将人们对过去信息的操控与咱们在数字时代习气的易于获取的信息相结合。每次保存修改,或增加或删去笔记时,网络上的每个节点都会进行更改。

    展开全文
  • 什么是以太坊

    千次阅读 2018-03-20 16:02:48
    什么是以太坊(Ethereum)?以太坊(eth)是一个全新开放的下一代区块链平台,它允许任何人在平台中建立和使用通过区块链技术运行的去中心化应用。目前它是最有人气、最成熟的区块链平台,相当于比特币,以太坊功能...
  • 什么是以太坊(下)

    2020-08-27 10:49:47
    上一篇文章:什么是以太坊(上)我们简单的介绍了下以太坊相关概念。 这篇文章我们将会围绕以下几个话题继续介绍以太坊的相关知识。 以太坊的创始人是谁 以太坊这个平台的价值是什么呢? 以太坊和比特币的关系 ...
  • 以太坊基础概念

    千次阅读 2019-07-22 18:14:23
    以太坊是一个开源平台,可以创建和发布去中心化的应用程序。本文是对以太坊的相关学习总结整理......
  • 详解以太坊的工作原理

    万次阅读 2017-10-13 13:53:04
    这篇文章主要讲解以太坊的基本原理,对技术感兴趣的朋友可以看看。 翻译作者: 许莉 原文地址:How does Ethereum work, anyway?   简介   不管你们知不知道以太坊(Ethereum blockchain)是什么...
  • 以太坊怎么购买,如何在交易平台上购买以太坊  近两年火遍全球的以太坊、比特币等虚拟货币,在2019年依然备受投资者的关注,尤其虚拟币合约交易的出现,为这个市场带来了新的活力,也为投资者提供了更安全简单的...
  • 新版本的挖矿软件进行了升级,算力有一定的提升,首先放上下载链接 百度云|算力提升版下载地址 下面是简单易懂的教程。 一、申请钱包 登录imtoken官方下载ETH钱包app 点击打开链接 按照流程进行注册就可以......
  • 最简单的以太坊(ETH)挖矿教程

    万次阅读 2020-09-25 15:55:03
    挖矿教程第三弹——以太坊挖矿教程 小白必看:什么是挖矿,挖矿的原理是什么,请看下方链接视频《什么是挖矿》 https://www.bilibili.com/video/av73767941/ 首先,请确保你的显存大于3GB,等于3GB也不行。因为...
  • 以太坊以太坊经典的区别

    千次阅读 2018-04-11 17:38:10
    社区里面有很多新成员,他们可能不知道以太坊(ETH)和以太坊经典(ETC)的区别,因此,我会在这篇文章阐述它们的一些主要区别。我尽可能毫无偏颇地说明这些区别。欢迎读者讨论或者找出其他观点,任何人都不是最终的...
  • 以太坊和超级账本对比

    万次阅读 2017-06-12 00:58:36
    超级帐本和以太坊智能合约对比
  • 以太坊:开发文档篇

    万次阅读 2019-05-08 09:56:39
    以太坊术语篇 以太坊官方文档 以太坊官网 以太坊官方博客 以太坊 GitHub 以太坊官方 Wiki 以太坊白皮书-中文版 以太坊黄皮书-英文 以太坊黄皮书-中文 以太坊 Homestead 文档 - 官方 以太坊 Homestead 文档...
  • 以太坊常用网址

    万次阅读 2016-07-30 22:01:00
    以太坊有很多有用的网站都分布在国外,找起来很费劲,这里总结一下 更多文章请看http://blog.csdn.net/sportshark 1、以太坊官方网站:https://ethereum.org/  该网站为以太坊的官方网站,有详细的以太坊介绍和各种...
  • 以太坊交易教程

    万次阅读 2018-09-26 16:56:45
    最近很多人都在问我挖出来的以太坊如何交易,我在这里系统的给大家进行介绍。 目前以太坊等虚拟货币有两种交易方式,我具体的讲述一下。 一、场外交易  场外交易就是个人与个人之间的交易,有一些网站提供了这样...
  • 以太坊挖矿教程,ETH挖矿教程

    万次阅读 2018-10-11 16:20:21
    以太坊(ETH)作为最火的区块链货币之一,具有很高的升值空间,而且以太坊挖矿条件简单,只要一张2G以上的显卡即可开始挖矿,一张1060每日就能有10多元的收益,这篇教程简单易懂很适合不太懂的小白上手。 一、申请...
  • 什么是以太币?如何获取?

    万次阅读 2019-04-11 09:44:43
    以太币是以太坊中使用的货币名称,用于在以太坊虚拟机内支付计算。这通过为了以太币购买gas间接实现,在gas中有所解释。 面额 以太坊有一个面额的度量体系,用作以太币单位。每个面额都有自己独特的名字(有的是在...
1 2 3 4 5 ... 20
收藏数 44,685
精华内容 17,874
关键字:

以太坊