精华内容
下载资源
问答
  • 以太坊什么.mp4

    2020-09-24 11:11:12
    以太坊是一个可编程可视化更易用的区块链,它允许任何人编写智能合约和发行代币。就像比特币一样,以太坊是去中心化的由全网共同记账,账本公开透明且不可窜改;与比特币不同的是,以太坊是可编程程序的区块链,他...
  • 什么要验证代码以太坊平台默认是公开透明的。以太坊区块链的所有数据都是公开的,任何人都可以访问。问题是以太坊上的所有合约代码都是二进制代码,很容易被以太坊虚拟机执行,但几乎不可读。虽然大多数开发人员...

    为什么要验证代码

    以太坊平台默认是公开透明的。以太坊区块链的所有数据都是公开的,任何人都可以访问。问题是以太坊上的所有合约代码都是二进制代码,很容易被以太坊虚拟机执行,但几乎不可读。虽然大多数开发人员使用Solidity语言编写智能合约,但部署的不是Solidity,而是二进制代码。

    值得思考得问题是:如果没有人能够证明它正在做它所做的事情,那么部署智能合约的重点是什么?你会把钱委托给未经验证的代码吗?不可能。

    在哪里验证

    合约验证有助于在使用智能合约的客户和部署合同的项目方之间建立信任。Etherscan区块链已经实现了一个在线工具来帮助开发人员验证他们的代码。验证是将Solidity源代码连接到智能合约的已部署二进制代码的过程。该工具检查Solidity代码的编译版本是否与二进制代码匹配。合约验证后,任何人都可以查看源代码,审核并审计。

    如何验证你的代码

    在我们解释如何验证你的代码之前,如果你使用我们的发币工具部署了一些ERC-20代币,你不需要做任何事情; 合约是自动验证的。这是使用我们的工具部署的在Etherscan区块链浏览器上的示例代币Solidity代码。

    本指南适用于使用Truffle和Solidity进行合约开发的开发人员。

    1.准备一个flat Solidity文件

    truffle-flattener concats在Truffle下开发的具有所有依赖关系的文件。使用以下命令安装它::

    npm install truffle-flattener -g

    使用truffle-flattener连接已部署契约的所有依赖项。示例代码如下:

    truffle-flattener contracts/ERC20/YidaibiERC20Token.sol > FlatYidaibiERC20Token.sol

    应创建一个名为FlatYidaibiERC20Token.sol的新文件,其中包含层次结构中使用的所有可靠性合约的内容。

    2.验证和发布工具

    本节将指导您完成Etherscan区块链浏览器的验证和发布工具,并帮助你填写其页面上的所有选项。我们将一步一步走。

    2.1 合约地址和构造函数参数ABI编码

    在Etherscan区块链浏览器上找到你的合同,然后导航到代码选项卡,单击“验证并发布”链接。Etherscan区块链浏览器将自动填充一些表单选项,因此你不必填下(合同地址和构造函数参数ABI编码)。

    2.2 合约名称

    接下来,你将使用solidity文件中的合约名称填写合约名称(例如,来自YidaibiERC20Token.sol,名称为YidaibiERC20Token)。

    2.3 编译器

    你使用的Solidity编译器版本可以使用以下命令查看:

    truffle version

    你会得到这样的东西:

    Truffle v4.1.14 (core: 4.1.14)

    Solidity v0.4.24 (solc-js)

    从下拉列表中找到您的编译器版本,使用最短的提交版本,而不是nightly(例如v0.4.24 + commite57f0147)。

    2.4 优化

    要检查是否启用了优化,请在项目的根文件夹中打开truffle.js配置文件,然后查找名为solc的对象,如下所示:

    solc: {

    optimizer: {

    enabled: true,

    runs: 200

    }

    }

    如果有这样的对象,你可以看到启用优化,运行200次。如果solc对象不存在,则禁用优化。

    2.5 合约代码

    在选项中复制/粘贴flattened文件(FlatYidaibiERC20Token.sol)的内容。

    2.6 完成

    点击“验证并发布”按钮,等待几秒钟以验证合同!

    展开全文
  • Solidity是一门面向合约的、为实现智能合约而创建的高级编程语言,主要目的是为了在以太坊虚拟机(EVM)上运行 Solidity是静态语言,支持继承、库和复杂的用户定义等特性 内含的类型除了常见的编程语言中的标准...

    Solidity是什么

    • Solidity是一门面向合约的、为实现智能合约而创建的高级编程语言,主要目的是为了在以太坊虚拟机(EVM)上运行
    • Solidity是静态语言,支持继承、库和复杂的用户定义等特性
    • 内含的类型除了常见的编程语言中的标准类型,还包括address等以太坊独有的类型,solidity源码文件通常以sol作为扩展名
    • 目前对于solidity语言编程最好的是Remix。remix是一个基于Web浏览器的IDE,它可以编写、部署智能合约

    Solidity的语言特性

    • Solidity语法接近于JavaScript,是一种面向对象的语言,但是因为Solidity是为了编写真正意义上的运行在网络中的去中心化合约,与传统的语言相比具有很多的不同点
    • 以太坊底层是基于账户,而不是UTXO,所以增加了一个特殊的address的数据类型用于定位用户和合约账户
    • 语言内嵌框架就支持支付,提供了和支付相关的payable关键字,可以在语言层面上直接支持支付
    • 使用区块链进行数据存储,数据中的每一个状态都可以永久存储,所以在合约中定义变量是需要指定使用内存还是区块链存储
    • 运行环境是在去中心化的网络上,所以需要强调合约或者函数执行的调用方式
    • 不同的异常机制。遵循原子特性,一旦出现异常,所有的执行都会被回撤,这主要是为了保证合约执行的原子特性,防止出现中间状态出现数据不一致的情况

    Solidity源码和智能合约

    • solidity源代码要想成为可以运行在以太坊上的智能合约需要经历以下步骤
    • 用Solidity编写的智能合约源代码需要使用编译器编译为成为字节码文件(bytecode),编译过程中会同时产生智能合约的二进制接口规范(Application Binary Interface,简称为ABI)
    • 通过交易(Transaction)的方式将字节码部署到以太坊网络,每次成功部署都会产生一个新的智能合约账户
    • 使用JavaScript编写的DApp通常通过修改web3.js+ABI去调用智能合约中的函数来实现对于数据的读取和修改

    Solidity编译器

    Remix

    • Remix是一个基于web浏览器的Solidity IDE,可在线使用而且不需要安装任何东西

    solcjs

    • Solcjs是Solidity的源码库的构建目标之一,是Solidity的命令行编译器
    • 使用npm可以便携地安装Solidity编译器solcjs
    • 默认是安装在/opt/node-v9.0.0-linux-x64的文件夹下,可以使用软连接映射到/usr/local/bin文件夹下

    命令如下

    npm install -g solc

     

     

    展开全文
  • 好像理解比特币还不够困难一样,以太坊给这个等式增加了一个全新...以太坊是一个去中心化、分布式的平台,可以在其上(使用可靠的编程语言)编写和执行智能合约。它是支持数百个去中心化应用程序(dApps)的基础层。每当...
    885ee97b925bc451fa8606a6b4a2d555.png
    7fea37bfdc1d997fdd9c72d80a2e9451.png

    好像理解比特币还不够困难一样,以太坊给这个等式增加了一个全新层次的复杂性。即使你有坚实的技术背景,在一切变得有意义之前,也需要一些时间和独立的研究来理解这个含义——除非你是一个天才。

    综上所述,对以太坊工作原理的基本理解实际上可以简化对加密货币的总体理解。以太坊是一个去中心化、分布式的平台,可以在其上(使用可靠的编程语言)编写和执行智能合约。它是支持数百个去中心化应用程序(dApps)的基础层。

    每当在以太坊上开发新的区块链技术和智能合约应用程序时,就可以创建一个新的以太坊代币。这个代币创建过程之所以简化至此,是因为以太坊为代币设置了标准。不同类型的应用程序将根据不同的标准进行标记,这取决于应用程序的用途。

    由于这些标准,智能合约和代币之间的互动更加直接,因此,开发人员可以在以太坊上创建dapps。 你会听到一个常见的类比来解释这个优点,以太坊就像是iOS或Android的dapps - 一个支持应用程序并使它们更容易构建的操作系统。

    以太坊代币最常见的标准是目前的ERC-20标准,但也有ERC-223,ERC-721和ERC-777标准。 在本文中,我们将解释每个标准以及如何在分散的生态系统中使用它。

    什么是ERC-20标准?

    0fc8ef8464be5ccbbd59b259401cfe30.png

    智能合约中使用的ERC-20标准仅包含6个基本功能,这些功能使代币成为可靠的功能。 代码非常简单,您无需掌握任何计算机科学知识即可理解它。

    首先是totalSupply( )函数,它确定在给定项目的代币经济中将要创建的代币总数。

    然后是transfer( )函数,用于将代币初始分发到用户钱包。这个功能是ERC-20代币在1COs中如此流行的最大原因,因为它使得在1CO完成时向投资者发送代币变得非常容易。

    transferFrom( )函数允许代币持有者在初始分发之后彼此交换代币。假设您想向朋友发送一些BAT,这个函数获取您的以太坊钱包地址、收件人的以太坊钱包地址和发送的金额,然后执行事务。

    接下来,顾名思义,balanceOf( )函数跟踪每个用户钱包中的代币余额。这很简单。

    同时,approve( )函数用于保证经济中的代币供应总量保持不变。换句话说,这个函数的作用是确保没有人能够凭空创建额外的代币来造福自己。

    最后,allowance( )函数确保事务在添加到区块链之前是有效的。每当用户希望将一些代币转移到另一个钱包时,该函数检查发送地址的代币至少与transferFrom( )函数中规定的数量相同。如果没有,则事务无效。

    通过这6个功能,创建新的代币并为它们开发平台和钱包非常简单。该标准已被数千个不同的项目采用。事实上,排名前20的以太坊代币中的所有项目都是ERC-20代币。

    小结

    ERC-20代币:

    · 是目前最流行的行业标准

    · 由6个关键代币功能组成

    · 已经被数以千计的不同加密货币项目所使用

    4ed79b8baa99b1f9d076e785cd3c2b22.png
    展开全文
  • 什么以太坊智能合约? 以太坊智能合约是存放在以太坊区块链具有特定地址的代码(它的功能)和数据(它的状态)集合。... 智能合约以以太坊特定的二进制字节...以太坊智能合约通常是以名为 Solidity 的高级语言编写,并被...

    什么是以太坊智能合约?

    以太坊智能合约是存放在以太坊区块链具有特定地址的代码(它的功能)和数据(它的状态)集合。智能合约账户之间可以相互传递消息以实现图灵完备运算。 智能合约以以太坊特定的二进制字节码通过以太坊虚拟机(EVM)运行于区块链上。

    以太坊智能合约通常是以名为 Solidity 的高级语言编写,并被编译为字节码上传到区块链上。

    Solidity

    Solidity是一种类似JavaScript的语言,允许你开发智能合约并可以被编译成EVM字节码,现在已经是以太坊的旗舰语言并且是最流行的。

    编写合约

    没有实现Hello World程序的语言是不完整的,在以太坊的环境中,Solidity没有一个明确的方式可以”输出”一个字符串。 最接近的方式就是实用日志事件将一个字符串放入区块链中:

    contract HelloWorld {
            event Print(string out);
            function() { Print("Hello, World!"); }
    }
    

    这条合约每次执行后,会通过Print并带有”Hello World”参数,将一条日志放入区块链中。

    编译合约

    可以通过多种形式的机制对solidity开发的以太坊 智能合约的编译。

    • 通过命令行使用 solc 编译器。
    • 通过 getheth``(仍需安装 ``solc 编译器) 提供的javascript控制台使用 web3.eth.compile.solidity
    • 通过 实时在线编译器.
    • 通过 Ethereum Wallet.

    在geth中设置solidity编译器

    如果你启动了 geth 节点,你可以通过如下命令来检查哪些编译器可以使用。

    > web3.eth.getCompilers();
    ["lll", "solidity", "serpent"]
    

    这个命令返回当前可用的编译器的字符串数组。

    Note

    solc 编译器同 cpp-ethereum 一起被安装,作为替代方案,你可以自己编译

    如果你的 solc 执行档不在指定的标准路径下,你可以通过 --solc 参数指定 solc 的执行路径。

    $ geth --solc /usr/local/bin/solc
    

    同样的,你可以通过命令行在运行时执行这个操作:

    > admin.setSolc("/usr/local/bin/solc")
    solc, the solidity compiler commandline interface
    Version: 0.2.2-02bb315d/.-Darwin/appleclang/JIT linked to libethereum-1.2.0-8007cef0/.-Darwin/appleclang/JIT
    path: /usr/local/bin/solc
    

    编译一个简单的合约

    我们来编译一个简单的合约代码:

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

    这个合约提供了一个名为 multiply 的函数,输入一个正整数 a 返回结果 a * 7

    你已经准备好了编译solidity代码的环境,使用 geth 的JS命令台 eth.compile.solidity():

    > contract = eth.compile.solidity(source).test
    {
      code: '605280600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa114602e57005b60376004356041565b8060005260206000f35b6000600782029050604d565b91905056',
      info: {
        language: 'Solidity',
        languageVersion: '0',
        compilerVersion: '0.9.13',
        abiDefinition: [{
          constant: false,
          inputs: [{
            name: 'a',
            type: 'uint256'
          } ],
          name: 'multiply',
          outputs: [{
            name: 'd',
            type: 'uint256'
          } ],
          type: 'function'
        } ],
        userDoc: {
          methods: {
          }
        },
        developerDoc: {
          methods: {
          }
        },
        source: 'contract test { function multiply(uint a) returns(uint d) { return a * 7; } }'
      }
    }
    

    Note

    编译器支持RPC <[https://github.com/ethereum/wiki/wiki/JSON-RPC](https://github.com/ethereum/wiki/wiki/JSON-RPC)>__ ,因此你可以使用web3.js 并通过RPC/IPC连接到 geth

    下面的例子显示了如何通过使用JSON-RPC的 geth 来使用编译器。

    $ geth --datadir ~/eth/ --loglevel 6 --logtostderr=true --rpc --rpcport 8100 --rpccorsdomain '*' --mine console  2>> ~/eth/eth.log
    $ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_compileSolidity","params":["contract test { function multiply(uint a) returns(uint d) { return a * 7; } }"],"id":1}' http://127.0.0.1:8100
    
    

    编译器为源代码中的每个单独的合约生成一个合约对象,命令 eth.compile.solidity 会返回合约名和合约对象的映射。这个例子中我们的合约名为 test ,所以命令 eth.compile.solidity(source).test 会返回名为test的合约对象,并包含如下相关域:
    code:编译生成的以太坊虚拟机字节码
    info:编译器输出的额外元数据
    source:源代码
    language:合约使用的编程语言(Solidity, Serpent, LLL)
    languageVersion:合约语言的版本号
    compilerVersion:编译合约代码所使用编译器的版本号
    abiDefinition:应用程序二进制接口定义
    userDoc:提供给用户的 [NatSpec Doc]
    developerDoc:提供给开发者的 [NatSpec Doc]

    编译器最直观的输出结构(codeinfo)反应出两个完全不同的 部署路径 ,编译出的EVMcode会给发给区块链上特定交易,剩下的(info)会存放在去中心化的区块链云端作为完善代码的元数据。

    如果你的源代码包含多个合约,那么输出会包含每一个合约的入口信息,合约的展开信息可以通过名字来获取,你可以通过查看当前的GlobalRegistrar合约来尝试一下效果:

    contracts = eth.compile.solidity(globalRegistrarSrc)
    

    创建并部署一个合约

    在开始这个章节前,请确保你有一个解锁的账户并且里面有一些资金。

    你现在可以通过前面章节的EVM代码来向一个空地址 发起一笔交易

    Note

    这个可以通过更容易的方式完成,也就是通过 实时在线Solidity编译器 或者 Mix IDE

    var primaryAddress = eth.accounts[0]
    var abi = [{ constant: false, inputs: { name: 'a', type: 'uint256' } }]
    var MyContract = eth.contract(abi)
    var contract = MyContract.new(arg1, arg2, ..., {from: primaryAddress, data: evmByteCodeFromPreviousSection})
    

    所有的二进制数据都会被序列化为十六进制格式,十六进制的字符串总是以 0x 作为前缀。

    Note

    请注意 arg1, arg2, ... 是合约的构造参数,可以接受任何输入,如果合约不需要任何构造参数那么这些参数可以被忽略。

    值得指出的是执行这些步骤你需要支付一些费用,一旦的交易被打包进区块,你账户的余额会根据以太坊虚拟机的瓦斯费用规则进行扣除,经过一些时间,你的交易会出现在一个状态被确认是一致的区块中,你的合约现在已经存在于区块链中。

    异步执行这些步骤的方法如下:

    MyContract.new([arg1, arg2, ...,]{from: primaryAccount, data: evmCode}, function(err, contract) {
      if (!err && contract.address)
        console.log(contract.address);
    });
    

    合约的交互

    通常使用抽象层 eth.contract() 来完成与合约的交互,该函数返回一个JavaScript对象,该对象包含了所有可以被JavaScript调用的合约函数。

    描述合约可用函数的标准方法是 ABI定义,这个对象是一个数组,该数组包含了每一个可用合约函数的调用签名和返回值。

    var Multiply7 = eth.contract(contract.info.abiDefinition);
    var myMultiply7 = Multiply7.at(address);
    

    现在所有ABI中定义的函数都可以在合约实例中使用了,你可以通过如下两种方法之一来进行调用:

    > myMultiply7.multiply.sendTransaction(3, {from: address})
    "0x12345"
    > myMultiply7.multiply.call(3)
    21
    

    当使用 sendTransaction 时,通过发送一个交易来调用函数。这种方式会消耗以太币,同时调用会永久被纪录在区块链中,这种方式的返回值就是交易的哈希值。

    当使用 call 时,函数会在本地的虚拟机(EVM)上执行,调用的返回值就是函数的返回值。这种方式的调用不会被纪录在区块链中,因此也不会改变合约的内部状态,这种方式被称为常量函数调用。这种调用方式不会消耗以太币。

    只关心返回值的情况下你应该使用 call ,如果你关心合约的状态变化那么就使用 sendTransaction

    在上面的例子中,不涉及改变合约状态,因此 sendTransaction 调用只会白白燃烧燃料(gas)增加宇宙的熵。

    合约元数据

    在上个章节我们解释了如何在区块链上创建合约,接下来我们处理编译器输出的内容,合约元数据或者合约信息。

    当与一个你还没有创建的合约进行交互时,你可能想要说明文档或者查看其源代码。合约作者被鼓励通过区块链或者第三方机构的服务来注册此类信息,例如: EtherChain 。API admin 为注册了这类信息的合约提供了便利的方法来查看。

    // get the contract info for contract address to do manual verification
    var info = admin.getContractInfo(address) // lookup, fetch, decode
    var source = info.source;
    var abiDef = info.abiDefinition
    

    这项工作生效的基本机制是:

    • 合约信息被上传到一个公共可访问的位置地址 URI
    • 知道合约地址任何人都可以找到相关的 URI

    这些合约信息通过两步区块链注册被打包: * 第一步:称为 HashReg 的合约通过内容哈希来注册合约代码。 * 第二步:称为 UrlHint 的合约通过内容哈希来注册url。 这些 注册合约 被作为前沿(Frontier)版本的一部分,同时被带入到家园(Homestead)版本中。

    使用这个结构,只需要知道合约的地址,然后获取到url,进而获取合约相关的所有元数据。

    如果你是一个称职的合约创建者,你需要遵循如下步骤:

    1. 将合约本身部署到区块链上
    2. 获取合约信息的json文件
    3. 部署合约信息的json文件到你选择的url上
    4. 注册代码哈希 -> 内容哈希 -> url

    JS API提供帮助让这些步骤变的非常简单,调用 admin.register 来得到合约摘要,将摘要序列化存储到指定的json文件中,计算文件的内容哈希,并最终将这些内容哈希注册为代码哈希。一单你将这些文件部署到任何url,你可以通过使用 admin.registerUrl 在区块链上注册你的内容哈希url(如果使用固定内容寻址模型作为文档存储那么rul-hint就不是必需的了)。

    source = "contract test { function multiply(uint a) returns(uint d) { return a * 7; } }"
    // 使用solc来编译
    contract = eth.compile.solidity(source).test
    // 创建合约对象
    var MyContract = eth.contract(contract.info.abiDefinition)
    // 合约的摘要信息,序列化到指定的json文件中
    contenthash = admin.saveInfo(contract.info, "~/dapps/shared/contracts/test/info.json")
    // 合约发送到区块链上
    MyContract.new({from: primaryAccount, data: contract.code}, function(error, contract){
      if(!error && contract.address) {
        // 计算内容哈希并且将其通过 `HashReg` 注册为代码哈希
        // 使用地址来发送交易
        // 返回我们用来注册url的内容哈希
        admin.register(primaryAccount, contract.address, contenthash)
        // 将 ~/dapps/shared/contracts/test/info.json 部署到一个url上
        admin.registerUrl(primaryAccount, hash, url)
      }
    });
    

    测试合约和交易

    通常要对合约和交易进行测试和调试,这个章节我们来介绍几种调试工具和实践方法。为了测试合约和交易,并且避免产生真实的影响,你最好在一条私有区块链上进行操作,这可以通过配置网络ID(选择一个独一无二的整数)来实现,并且不需要其他对等节点。推荐的做法是为测试设置其他的数据目录和端口,以避免可能的来自其他节点的影响(假设使用默认的参数运行)。通过调试模式来运行 geth ,并设置最高级别的日志:

    geth --datadir ~/dapps/testing/00/ --port 30310 --rpcport 8110 --networkid 4567890 --nodiscover --maxpeers 0 --vmdebug --verbosity 6 --pprof --pprofport 6110 console 2>> ~/dapp/testint/00/00.log
    

    提交任何交易前,你需要设置好你的测试链,详细内容请查看: <cite style="box-sizing: border-box;">test-networks</cite>

    // create account. will prompt for password
    personal.newAccount();
    // name your primary account, will often use it
    primary = eth.accounts[0];
    // check your balance (denominated in ether)
    balance = web3.fromWei(eth.getBalance(primary), "ether");
    
    // assume an existing unlocked primary account
    primary = eth.accounts[0];
    
    // mine 10 blocks to generate ether
    
    // starting miner
    miner.start(4);
    // sleep for 10 blocks (this can take quite some time).
    admin.sleepBlocks(10);
    // then stop mining (just not to burn heat in vain)
    miner.stop();
    balance = web3.fromWei(eth.getBalance(primary), "ether");
    

    创建交易后你可以强制执行它们,如下:

    miner.start(1);
    admin.sleepBlocks(1);
    miner.stop();
    

    可以通过如下来检查未验证的交易:

    // shows transaction pool
    txpool.status
    // number of pending txs
    eth.getBlockTransactionCount("pending");
    // print all pending txs
    eth.getBlock("pending", true).transactions
    

    如果提交了交易创建合约,你可以检查所需代码是否已经插入到当前的区块中:

    txhash = eth.sendTansaction({from:primary, data: code})
    //... mining
    contractaddress = eth.getTransactionReceipt(txhash);
    eth.getCode(contractaddress)
    

    本文章内容来源于以太坊社区,螃蟹翻译。顺便分享一个适合新手的以太坊教程,这个教程把上面的内容讲的更清楚更透彻。

    展开全文
  • 这是一个基于go语言编写的,自动化测试以太坊智能合约的开发框架,使用此框架,可以自动化的部署合约,自动测试合约内的功能函数。你也发现了,本框架模拟的是truffle框架,但是完全是基于go语言编写,而且以太坊的...
  • 四年前的2015年7月30日,世界上第一个通用区块链平台上线,该平台名为以太坊,这是第一个以图灵完备的虚拟机和本地编程语言为特色的平台,能够部署任何算法复杂度的代码。 MakerDAO 基金会的智能合约负责人 Mariano...
  • 它是用Go编程语言编写的,简称Geth。 Geth是以太坊协议的具体落地实现,通过Geth,你可以实现以太坊的各种功能,如账户的新建编辑删除,开启挖矿,ether币的转移,智能合约的部署和执行等等。 Geth官网:...
  • 阅读本文前,你应该对以太坊、智能合约及Solidity语言有所了解,如果你还不了解,建议你先看以太坊什么。 当智能合约出现bug 一方面正式由于智能合约的不可修改的特性,因为只要规则确定之后,没人能够修改它,...
  • 如何验证以太坊智能合约的源代码

    千次阅读 2019-10-09 09:34:28
    虽然大多数开发人员使用Solidity语言编写智能合约,但部署的不是Solidity,而是二进制代码。 值得思考得问题是:如果没有人能够证明它正在做它所做的事情,那么部署智能合约的重点是什么?你会把钱委托给未经验证.....
  • Solidity语言是一种以太坊智能合约高级编程语言,运行在以太坊(Ethereum)虚拟机(EVM)之上。也就是说,Solidity 可以用来编写以太坊的智能合约。也就是Solidity 为以太坊而生。 Solidity在哪里编写呢? So.
  • 合约依靠被称作以太坊虚拟机(EVM) 字节代码(以太坊特有的二进制格式)上的区块链运行。 合约很典型地用诸如Solidity等高级语言写成,然后编译成字节代码上传到区块链上。 也有其他语言可以用于编写智能合约如...
  • 好像理解比特币不够困难,以太坊为这个等式增加了一个全新的复杂程度...您可以看到,以太坊是一个去中心化的平台,可以在其上编写智能合约(使用Solidity编程语言)并执行。它是支持数百个去中心化应用程序(dApp)...
  • 以太坊智能合约学习笔记(一)

    千次阅读 2018-04-10 10:16:23
    我们主要用solidity语言编写智能合约,它们将在以太坊虚拟机EVM(类似于JVM的概念)中运行。在这一系列笔记中,我们将以实例为基础,讲解智能合约开发的流程。首先我们将一起建立一个基础的单员工薪酬系统,并在后续...
  • :high_voltage: EthVM:基于Apache Kafka的以太坊的开源处理引擎和Block Explorer :high_voltage: 由 / 提供支持 EthVM:开源处理引擎和以太坊的区块浏览器 关于 什么是EthVM? EthVM是带有客户端Block Explorer的...
  • Truffle是针对基于以太坊的Solidity语言的一套开发框架。本身是基于Javascript实现的。 虽然是使用我们熟悉的Javascript实现, 但是truffle主要还只是一个编译与发布智能合约的一个工具(当然还有其他的功能). ...
  • 以太坊凭着智能合约,却一路高歌猛进。现在,这一情况将得到改变。瑞波支持的研发团队XRPL Labs在准备推出方案“Hooks”,中文意思就是“钩子”。该方案允许XRP交易前后执行一定的程序逻辑。 什么是钩子? 钩子是...
  • 什么是vyper语言

    2019-03-16 14:44:15
    Vyper是一种全新的以太坊开发语言。 一、它在逻辑上类似于Solidity,在语法上类似于Python 和Solidity一样,Vyper可编译为以太坊虚拟机(EVM)字节码,运行在以太坊虚拟机(EVM)上。 语法与Python非常类似,可以...
  • Blockchain1024)翻译原文链接:https://medium.com/@mycoralhealth/code-your-own-blockchain-mining-algorithm-in-go-82c6a71aba1f随着最近比特币和以太坊采矿热潮的兴起,大家就好奇这到底是什么。对于这个领域的...
  • Geth是由以太坊基金会提供的官方客户端软件,用Go编程语言编写的。Geth提供了一个交互式命令控制台,通过命令控制台中包含了以太坊的各种功能(API)。全名go-ethereum,github地址go-ethereum。wiki里为使用文档。 ...
  • 如何编写一个可升级的智能合约

    千次阅读 2018-03-19 10:05:15
    阅读本文前,你应该对以太坊、智能合约及Solidity语言有所了解,如果你还不了解,建议你先看以太坊什么 当智能合约出现bug 一方面正式由于智能合约的不可修改的特性,因为只要规则确定之后,没人能够修改它,...
  • 使用Solidity语言编写智能合约避免了直接编写底层的以太坊虚拟机代码,提高了编码效率,同时该语言也具有更好的可读性。 代币合约 目前,在以太坊上的众多智能合约之中,应用最为广泛的是代币合约(Token Cont...

空空如也

空空如也

1 2 3 4
收藏数 61
精华内容 24
关键字:

以太坊什么语言编写