精华内容
下载资源
问答
  • 以太坊智能合约
    千次阅读
    2022-02-14 03:01:21

    1.重装了nodejs,并配置环境

    2.修改了 truffle-config.js 配置文件,并完成编译 (经历web3方法不存在、无法下载对应的solc编译版本)

    3.下载了ganache,并成功部署了第一个合约

    期间阅读了 nodejs环境配置教程、truffle文档、web3.js文档、github合约示例代码、npm手册、truffle suite文档 等

    总体:细节性东西比较多,比较费时间

    更多相关内容
  • 文章目录一、智能合约概述1.1 智能合约是什么1.2 solidity语言二、外部账户调用智能合约三、一个合约调用另一个合约3.1 直接调用3.2 使用address类型的call()函数3.3 代理调用delegatecall()函数3.4 payable3.5 ...
  • 本文将介绍在使用Solidity开发以太坊智能合约时常用的一些Gas优化模式。 以太坊教程链接: Dapp入门 | 电商Dapp实战 | Token实战 | Php对接 | Java对接 | Python对接 | C#对接 | Dart对接 1、使用短路模式排序...
  • Flutter和以太坊智能合约 通过web3dart软件包与以太坊智能合约进行交互的Flutter应用程序示例。 入门 该项目假定您的Flutter安装至少已升级到2.0版,以便能够在移动平台(Android和iOS),Web(Chrome)和台式机(在...
  • 『区块链』从零构建以太坊智能合约到项目实战。里面带有视频和源码
  • 以太坊智能合约

    万次阅读 2021-11-10 15:34:50
    FROM你 AMOUNT 可以是0或者任意你想放在合约里的以太坊数量 调用智能合约 TO字段是智能合约账户地址 DATA字段包含函数名称和参数– 如何调用智能合约 FROM你 AMOUNT可以是0或者任何数量的以太坊,比如你需要为一项...

    这里不讲太多细节,区块链技术的核心概念是分布式账本。它是一种在众多参与者之间共享的特殊类型的数据库。

    这个特殊的数据库就是一个交易列表,记录了网络中发生的每一笔交易。每个人都有一个副本。这种去中心化分布结合强有力的货币激励措施, 消除了各方之间信任的必要性。

    传统意义上,当事人之间的信任是通过中间人,即第三方来解决的,比如Paypal、银行。与你不信任的人之间的交易将通过双方都信任的中间人进行。

    有了区块链,这种需求消失了。因为你可以把你的信任放在网络上,在这里,强有力的激励措施消除了作弊欺骗的欲望(简而言之:遵守规则更有利可图)。

    更具体地说:区块链网络是一组机器,它们记录着相同的交易列表副本(例如,从A转给B的钱)。

    因为每个人都有相同的列表,所以很难欺骗网络接受错误的交易。结合一些加密算法和货币奖励以便遵守规则,你的网络会非常安全。

    所有这些也使得区块链几乎是不可变的,因为改变历史记录的唯一方法是获得全网大多数人的同意。

    什么是智能合约?

    区别于比特币,以太坊最大的不同是引入了智能合约的概念。比特币是数字货币,以太坊也是数字货币,但远不止这些。

    “智能合约”这个名称有点误导人。它们不是真正的合约,也不特别智能。它们只是一些可以运行在区块链上的代码 - 或者说是计算机逻辑运算。

    首先,我将介绍有关智能合约是以太坊网络上的一种特殊账户。你有用户账户,你还有智能合约账户。

    一个用户账户包括:

    • 一个地址(类似于你的银行账号-它也存在于比特币上)
    • 余额(我有多少钱)

    一个智能合约账户包括:

    • 一个地址
    • 余额(以太坊)
    • 一个状态
    • 代码

    地址和普通账户的地址是一样的,它是该账户的唯一识别符。

    余额和普通账户也是一样的概念。唯一令人激动的是,智能合约上的余额意味着代码可以拥有金钱。它可以处理这些钱,也可能因为编码错误而造成处理不当。

    智能合约帐户的状态是智能合约中声明的所有字段和变量的当前状态。它的工作方式与大多数编程语言中类的字段变量相同。事实上,一个类的实体化对象可能是理解智能合约的最简单方法。唯一的区别是这个对象是永久存在的(除非被编程为自我毁灭)。

    智能合约的代码是编译好的字节代码,以太坊客户机和节点可以在上面运行。它是在创建智能合约时执行的代码,并且包含可以调用的函数。就像面向对象编程的语言中的任何对象一样。

    关于智能合约的趣事:它们可以调用其它的智能合约。这就开启了创建自主代理的能力,这些代理可以自己花钱和进行交易

     假设我用上面的代码创建了一个智能合约。该代码有一个名为counter的字段,类型为uint(整数)。counter变量的内容是本合约的状态。每当我调用count()函数时,任何人都能看到这个智能合约在区块链上的状态将会加1。

    稍后我们将通过更多的例子来解释它是如何工作的,但首先我想回到以太坊和比特币的交易,并以此来解释一些事情。

    交易水平上,以太坊VS比特币

    比特币交易非常简单。你可以只做一件事。一种类型的交易。略过一些细节,一切都可以归结为TO(付给,谁在收钱),FROM(来自于,谁在付钱)和AMOUNT(数量,多少钱)。这使得比特币成为一种价值储存手段,能够在网络参与者之间传递价值。

    以太坊的不同之处在于交易还有一个“DATA”(数据)字段。该“DATA”字段支持三种类型的交易:

    • 价值转移(和比特币一样)
      • TO接收地址
      • DATA字段为空或包含要附加的任何消息
      • FROM
      • AMOUNT是你要发送的以太坊数量
    • 创建智能合约
      • TO字段为空(它触发智能合约的创建)
      • DATA字段包含编译为字节代码的智能合约代码
      • FROM
      • AMOUNT 可以是0或者任意你想放在合约里的以太坊数量
    • 调用智能合约
      • TO字段是智能合约账户地址
      • DATA字段包含函数名称和参数– 如何调用智能合约
      • FROM
      • AMOUNT可以是0或者任何数量的以太坊,比如你需要为一项服务合约支付的数目

    在这些交易中还有更多的字段和复杂性,但以上这些已经很好地解释了核心概念。让我们看看关于这些交易的一些更具体的例子。

    以太坊交易

    价值转移

    非常简单。TO向一个地址发送一定数目的以太坊代币。你也可以为一笔交易加上一条消息。

    创建智能合约

    正如以上提到的,一个空的TO字段表示创建一份智能合约。DATA字段包含编译为字节代码的智能合约。

    调用合约

     我们稍后会回到这个问题,但是其主要概念是你将交易发送到你想要调用的智能合约地址,然后将函数调用放在DATA字段中。

    注意成本和执行

    正如你所想象的,你不能一直在区块链上免费运行计算量很大的程序。

    代码的执行是由调用者用一种叫做gas的东西来支付的。Gas是运行以太坊虚拟机的燃料。你可以将其视为每次执行指令的费用(就像一行代码)。

    你需要为一个特定的合约调用设置可花费的最大gas。比如,如果你调用的代码进入了一个永久循环,将会确保在执行过程中所花费的gas不会超过设置的最大gas。

    gas(执行)的成本由网络的矿工(运行代码的节点)决定。关于gas和执行,还有很多知识。但以上这些值得牢牢记住。

    智能合约如何工作?

    当一个智能合约被部署到以太坊网络时,任何人都可以调用智能合约的函数。虽然出于安全考虑该函数可能阻止人们调用,但你可以自由尝试。

    假设有一个MyObject类型的对象。该对象有一个名为myFunction的函数。要调用它,只需引用对象的实例、调用哪个函数和使用哪个参数调用。

    像这样:

    myObjectReference.myFunction(parameters);

    该函数返回的任意值,可以将其存在变量中:

    myVariable = myObject.myFunction(parameters);

    调用一个智能合约在概念上是一样的。唯一的区别是,你必须将调用相关的所有信息放在交易中,对其签名并发送到网络上来执行。

    假设你想要调用函数myFunction,其中包含智能合约“0x0123456”里的一些参数。调用智能合约分四步:

     现在,当交易被放进区块链中的一个块,该状态变化便会被记录在整个网络中。

    世界计算机

    许多人把以太坊称为世界计算机。这是个不错的类比。它就像一台由整个世界来维护的虚拟机。

    但是请记住:虽然智能合约是图灵完备的,并且理论上可以做任何事情,但它们不太适合繁重的计算工作。

    以太坊世界计算机就像一台运行简单程序的老式慢速计算机。由于成本和安全性,保持以太坊的智能合约小而简单是至关重要的。

    合约需要的计算量越多,运行的成本就越大。合约越复杂,就越有可能存在安全漏洞。而且智能合约中的安全漏洞是

    很难处理的——毕竟区块链是不可变的。

    举例:通证

    回归重点,我想解释一下通证是如何工作的。

    大多数这些通证都是在以太坊上创建的,而且概念非常简单(它运行良好,但是太简单了,以至于几乎可以说是愚蠢的)。

    如何使用Javascript或其他编程语言编写一个简单的货币系统?你可以在一个文件中完成所有的操作。你真正需要记录的是:

    1. 总供应量

    2. 账户

    3. 账户中的余额

    4. 资金流向

    通过用户和余额之间的简单映射,你可以得到123的答案

    该map只是把一个账户映射到一笔钱。

    使用构造函数(constructor),你可以在自己的帐户中设置初始供应量 (或分布在任意数量的账户中)资金的流动是通过简单的函数来完成的,即从一个账户中减去,然后加在另一个账户上。

    创建通证与我们在以太坊使用的概念完全相同。当然,还有一些更复杂和额外的功能,但是基本概念非常简单。

    以下就是基本的通证合约在以太坊编程语言中呈现的样子(再次重申:为清晰起见进行了简化):

    这就是基础编程概念。我认为这说明了以太坊作为一个平台的力量。通过一些简单的代码,你可以凭空生成一个代币,它本质上就是由世界计算机记录的一些变量。欢迎来到新的互联网。

     

    展开全文
  • 本套课程将带你进入以太坊开发,包括以太坊开发环境的搭建,以太坊的各种节点介绍。通过本次课程的学习,你可以对以太坊有基本的认识,并能够创建、部署自己的智能合约到节点上去。
  • 为了使语句表达更加贴切,个别地方未按照原文逐字逐句...这篇文档旨在为Solidity开发人员提供一些智能合约的安全准则(security baseline)。当然也包括智能合约的安全开发理念、bug赏金计划指南、文档例程以及工具。
  • 以太坊是最早提出做智能合约的平台。由于以太坊区块链被普遍接受,因此多数区块链的智能合约采取与以太坊相似的设计。本文将详细介绍以太坊智能合约:它是什么?它有什么用? 以太坊智能合约是什么 以太坊的...
  • 以太坊智能合约NodeJS API ================================================== ==== NodeJS REST API与以太坊平台进行交互特征通用API :用于以太坊网络上的常规交易。 通用api在以下位置实现: apis/ethereum.js ...
  • 目录 1. 最佳实践 2. 实用设计案例 2.1 控制器合约与数据合约: 1->1 ...以太坊EVM是当前区块链行业应用最为广泛的虚拟机。其所支持的智能合约语言是图灵完备的。该语言支持各种基础类型(Booleans,Integers,Address,
  • 以太坊知识合约 该存储库包含Knowledge上使用的所有以太坊智能合约。 松露是我们的开发,测试和部署框架。 OpenZeppelin是我们用于在以太坊上编写安全的智能合约的实体库。 我们遵循和。知识代币销售知识令牌销售于...
  • 以太坊智能合约中的IPFS 这是一个简单的博客应用程序,是将以太坊的智能合约连接到IPFS上存储的JSON数据库的概念证明。 通信基于服务。 怎么跑? 准备博客合同 首先,您必须部署合同。 这是一个如何通过节点部署到...
  • 《深入以太坊智能合约开发》源代码第11章相关源码第11章源码及测试代码存放于目录: chapter11-source-code ,详情见项目中的readme第12章源码参见目录chapter12-source-code README
  • 以太坊智能合约,将收到的资金平均分配给一定数量的产出。 用法 要部署此合同的实例,请将代码从复制到您的以太坊钱包,然后进行部署,将地址共享的数组传递到构造函数中。 您还可以通过使用地址配置并运行以下...
  • 坚固性以太坊智能合约的Solidity Programs
  • 本文主要介绍在Ubuntu系统上搭建以太坊开发环境的过程,以及简单的智能合约开发。
  • 智能合约定义成员变量、event等,构造函数初始化受益人、拍卖结束时间,如下所示: 出价的函数如下,标注payable说明函数可以接收转账,require(now <= auctionEnd)检查拍卖是否结束,如果已经结束就抛出异常,...
  • 开发 DApp 时要调用在区块链上的以太坊智能合约,就需要智能合约的 ABI。本文希望更多了解 ABI,如为什么需要 ABI?如何解读 Ethereum 的智能合约 ABI?以及如何取得合约的 ABI? 数字猫合约 ABI ABI(Application ...
  • 本书首先用比特币简单介绍了区块链的概念,然后快速进入以太坊及其开发生态环境。然后进行简单的“Hellow World”的智能合约的开发。接着对去中心化自治组织、分布式应用和智能合约优化等问题进行了研究。接下来探讨...
  • 搭建以太坊智能合约开发环境

    万次阅读 2021-08-16 02:08:44
    搭建以太坊智能合约开发环境 搭建以太坊智能合约开发环境 相关概念 以太坊智能合约开发环境介绍 Linux安装Geth 搭建私网并启动Geth 第一步:配置创世块文件 第二步:数据初始化 第三步:启动Geth节点 相关资料 ...

    搭建以太坊智能合约开发环境


    相关概念

    • 什么是智能合约?

      如果我们把以太坊看作是一台"全球计算机",那么智能合约就是是运行在以太坊这个"全球计算机"上的"进程"。

      注:之所以有上述比喻,是因为以太坊网络的节点遍布全球,在这样的网络中运行计算就相当于在"一台全球计算机"中运行计算。

    • 为什么叫智能合约?

      智能:智能合约是可以自动运行的。

      合约:以太坊的合约代码多会涉及一些资产转移,而现实世界中签订合同也多是伴随着资产转移,因此把这样的代码叫合约。

    以太坊智能合约开发环境介绍

    以太坊智能合约是运行在以太坊节点上的,因此安装开发环境时,就需要安装至少一个以太坊节点(详见下文Geth安装步骤)。

    注:不只是以太坊,学习其他区块链平台前,也是需要安装对应区块链平台的节点的。

    以太坊针对多种语言(Go、C++、Rust、Java、Python),都开发了对应的客户端软件,其中最受欢迎的还是Gethgo-ethereum),它是由Go语言编写的。

    Linux安装Geth

    提示:本人的安装环境为Ubuntu18

    官网安装说明见:https://geth.ethereum.org/docs/install-and-build/installing-geth

    • 以命令行的方式安装(略)

    • 以压缩包的方式安装

      1. 第一步:下载安装包

        wget https://gethstore.blob.core.windows.net/builds/geth-alltools-linux-amd64-1.9.10-58cf5686.tar.gz
        在这里插入图片描述

      2. 第二步:解压

        tar zxvf geth-alltools-linux-amd64-1.9.10-58cf5686.tar.gz geth-alltools-linux-amd64-1.9.10-58cf5686/
        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6uEgl4FE-1630258108496)(../repository/image-20210825022336560.png)]

      3. 第三步:配置(临时)环境变量

        mv geth-alltools-linux-amd64-1.9.10-58cf5686 ~/geth-home
        export PATH=$HOME/geth-home:$PATH
        echo `export PATH=$HOME/geth-home:$PATH` >> ~/.bashrc
        

        注:root用户执行后,将geth-alltools-linux-amd64-1.9.10-58cf5686移动并重命名到了/root/geth-home位置在这里插入图片描述

      4. 第四步:输入geth versiongeth --help验证一下
        在这里插入图片描述

    搭建私网并启动Geth

    相关概念:

    • 主网:以太坊真是节点运行的网络,节点遍布全球,此网络中使用的ETH是真实的虚拟数字货币,部署合约时需要消耗真金白银。
    • 测试网:测试网的节点没有主网节点那么多,主要是为以太坊开发者提供一个测试的平台环境,此网络上的ETH可以通过做任务获得。
    • 私网:私网是由开发者自行组建的网络,不与主网及测试网连通,独立存在,仅用于个人测试或企业项目使用。

    不论是主网、测试网还是私网,都可以使用Geth来启动;Geth默认连接的是以太网主网,如果想要连接测试网可以连接Ropstenrinkeby

    // Ropsten测试网络
    geth --testnet --fast --cache=512 console
    // Rinkeby测试网络
    geth --rinkeby --fast --cache=512 console
    

    第一步:配置创世块文件

    创建genesis.json文件:

    {
        "config":{
            "chainId": 18,
            "homesteadBlock": 0,
            "eip150Block": 0,
            "eip155Block": 0,
            "eip158Block": 0
        },
        "alloc": {},
        "coinbase":"0x0000000000000000000000000000000000000000",
        "difficulty":"0x2",
        "extraData":"",
        "gasLimit":"0xffffffff",
        "nonce":"0x0000000000000042",
        "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",
        "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",
        "timestamp": "0x00"
    }
    
    • coinbase:挖矿后获得奖励的账户地址
    • difficulty:挖矿难度
    • gasLimit:一个区块所能容纳gas的上限,智能合约指令在执行时需要消耗gas,,可通过以太币自动兑换
    • nonce:随机值
    • mixhash:一个256位的hash证明,与nonce相结合,验证本块的有效性
    • extraData:附加信息,随意填写
    • parentHash:前一块的hash值,创世块的parentHash值为0

    第二步:数据初始化

    初始化指令

    geth init genesis.json --datadir ./data
    
    • init:初始化关键字
    • datadir:指定数据存储位置

    效果如图:
    在这里插入图片描述

    第三步:启动Geth节点

    # 添加环境变量(若已添加环境变量,可跳过此步)
    export PATH=$HOME/geth-home:$PATH
    echo `export PATH=$HOME/geth-home:$PATH` >> ~/.bashrc
    # 启动Geth节点
    geth --datadir ./data --networkid 18 --port 30303 --rpc --rpcport 8545 --rpcapi 'db,net,eth,web3,personal' --rpcaddr 192.168.19.129 --rpccorsdomain '*' --gasprice 0 --allow-insecure-unlock console 2> 1.log
    
    • datadir:指定之前第二步初始化的数据目录文件
    • networkid:配置成与第一步genesis.json配置文件config内的chainId相同值,代表加入哪个网络,私网随意编号即可
    • port:P2P端口,即:节点之间互相通信的端口
    • http:开启远程调用服务
    • rpcport:远程服务端口,默认值为8545
    • rpcapi:远程服务提供的远程调用函数集
    • rpcaddr:默认值为localhost,只允许本机连接;如果需要允许其他机器连接的话,这里要指定当前机器的ip
    • rpccorsdomain:指定可以接收请求来源的域名列表(浏览器访问,必须开启)
    • gasprice:gas的单价
    • allow-insecure-unlock:允许在Geth命令窗口解锁账户
    • console:进入控制台
    • 2 > 1.log:UNIX系统下的重定向,将Geth产生的日志输出都重定向到1.log中,以免刷日志影响操作

    效果如图:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1hc2KWrm-1630258108502)(../repository/image-20210826015501221.png)]


    ^_^ 整理自《Go语言区块链应用开发从入门到精通》高野 编著

    ^_^ 本文已经被收录进《程序员成长笔记》 ,笔者JustryDeng

    展开全文
  • 本课程从什么是代币(Token)讲起,分析实现一个代币关键的点是什么。然后逐步扩展到实现标准ERC20代币、功能代币、如果众筹发行代币。...大家学习之后,真正可以触类旁通学会更多的以太坊合约开发。
  • 通常智能合约的开发流程是用solidlity编写逻辑代码,再通过编译器编译元数据,最后再发布到以太坊上。 代码结构 . ├── analysis.go //跳转目标判定 ├── common.go ├── contract.go //合约数据结构 ├── ...
  • 本文将介绍如何在以太坊智能合约中实现代币的空投。区块链世界中所谓空投(airdrop),就是免费给你的区块链地址(公钥)发送代币。 代币空投的方式层出不穷,有手工打币空投的,也有向代币合约转账进行空投的,还...
  • 在本文的这个以太坊智能合约教程中,我们将了解如何使用Truffle Ethereum和以太坊专用网络来执行智能合约。 我们将在以太坊智能合约教程中查看以下主题: 使用案例:保险流程中的智能合约 智能合约的好处 安装先决...

    区块链技术在顶级技术中占据主导地位的主要原因在于其去中心化。虽然区块链的主要目的是在没有中心的情况下维护交易记录,但为了实现自动化,智能合约被引入。那么在写完智能合约之后呢?在本文的这个以太坊智能合约教程中,我们将了解如何使用Truffle Ethereum和以太坊专用网络来执行智能合约。

    我们将在以太坊智能合约教程中查看以下主题:

    • 使用案例:保险流程中的智能合约
    • 智能合约的好处
    • 安装先决条件
    • 配置Genesis Block
    • 运行以太坊专用网络
    • 创建以太坊帐户
    • 创建以太坊智能合约
    • 执行以太坊智能合约

    使用案例:保险流程中的智能合约

    区块链遵循的是“没有中央权力机构”,这就是智能合约引入的原因。但你有没有想过如何使用智能合约?那么,在以太坊智能合约的这一部分中,我将解释保险流程中智能合约的使用案例。

    让我们考虑一个航班延误保险的例子。假设你想要从出发地A到目的地C进行飞行,但你没有直接飞行。那么,你决定通过B来转机。现在,你的路线将从A到B,然后从B到C,其中B是机场,你将更改航班。不幸的是,从A到B以及从B到C的航班之间没有太大的时间差距。所以,如果有任何问题,一旦从A到B的航班延误,那么你将错过从B到C的航班。意识到这一点后,为了避免重大损失,你可能需要一个航班延误保险。

    现在,如果你从A到B的航班延误(这将使你错过从B到C的航班),你将获得保险金额。这是正常的情况,如果你的航班延误,你可以申请保险。然后,有人会核实并批准保险,最后,你将获得你的保险金额。但这是一个漫长的过程。

    你如何使用智能合约来改善保险流程?

    谈到金融交易,特别是当你拿钱时,“越快越好”,不是吗?那么,让我们看看智能合约如何加强保险流程。智能合约是数字合约,在满足特定条件时自动执行。如果航班延误,可以编写智能合约以向选择航班延误保险的人支付保险金额。因此,当航班延误并且系统记录此延迟时,保险将立即支付。

    OK!保险金额在几秒钟内支付。这就是智能合约如何简单快速地实现流程。

    智能合约的好处

    你已在上面的示例中看到智能合约如何加强财务流程。除快速交易外,智能合约还有更多好处。在这里,我列出了使用智能合约的其他一些好处:

    • 自动化:智能合约自动执行所有步骤。
    • 没有中介:当你使用智能合约时,你不需要中介来完成工作,因为一切都将由智能合约处理。
    • 成本效益:使用智能合约可以节省银行收取的交易费用和中介(如果有的话)的服务费用。

    现在,我们知道如何使用智能合约来让世界变得更快,让我们亲身体验这个以太坊智能合约教程。

    安装先决条件

    对于以太坊智能合约教程,我们需要5个重要的应用程序:

    • NodeJS
    • NPM
    • Ethereum
    • Truffle
    • Solidity Compiler

    安装NodeJS

    NodeJS是一个用于构建服务器应用程序的JavaScript框架。由于我们使用的是专用网络,因此NodeJS可以轻松构建网络应用程序。

    要安装Nodejs,请在终端中运行以下命令:

    $ sudo apt-get install nodejs
    

    安装NPM

    NPM代表Node Package Manager,用于运行Nodejs应用程序。

    要安装NPM,请在终端中运行以下命令:

    $ sudo apt-get install npm
    

    安装以太坊

    以太坊是一个基于开源和公共区块链的分布式计算平台,用于构建去中心化应用程序。

    要安装以太坊,请在终端中运行以下命令:

    $ sudo apt-get install software-properties-common
    $ sudo add-apt-repository -y ppa:ethereum/ethereum
    $ sudo apt-get update
    $ sudo apt-get install ethereum
    

    安装Truffle

    Truffle是以太坊Blokchains的开发环境,测试框架和资产管道。

    要安装Truffle,请在终端中运行以下命令:

    $ npm install -g truffle
    

    安装Solidity Compiler

    Solidity是一种用于编写智能合约的编程语言。要在我们的系统上运行智能合约,我们必须安装Solidity Compiler。

    要安装Solidity Compiler,请在终端中运行以下命令:

    $ sudo npm install -g solc
    

    配置Genesis Block

    Genesis Block是Blockchain的起点,我们需要一个genesis文件来启动Blockchain。在以太坊智能合约的这一部分中,我们将编写一个Genesis文件并对其进行配置以允许我们运行智能合约。

    让我们首先创建一个新目录,然后在该目录中创建genesis文件:

    $ mkdir ethereum-network
    $ cd ethereum-network
    $ nano genesis.json
    

    现在,在genesis.json文件中输入以下行:

    {
    "config": {
    "chainId": 2019,
    "homesteadBlock": 0,
    "eip155Block": 0,
    "eip158Block": 0
    },
    "alloc": {},
    "difficulty" : "200"
    "gasLimit" : "99999999999999"
    }
    

    保存并退出。

    运行以太坊专用网络

    在此Etheruem智能合约教程中,我们将在专用网络上部署以太坊智能合约。因此,要启动此网络,我们将使用以下命令:

    $ geth --datadir ./dataDir init ./genesis.json
    

    $ geth --port 4321 --networkid 1234 --datadir=./dataDir  --rpc --rpcport 8543 --rpcaddr 127.0.0.1  --rpcapi "eth,net,web3,personal,miner"
    

    在进一步讨论之前,让我解释一下上面命令中使用的一些重要参数:

    • datadir:存储与Blockchain相关的数据的目录。
    • rpc:启用HTTP-RPC服务器。
    • rpcport和rpcaddr分别用于设置网络的端口和地址。
    • rpcapi:允许我们使用不同的API与以太坊网络进行交互。

    将Geth连接到以太坊私有区块链

    Geth控制台是我们可以与以太坊私人区块链互动的控制台。要将Geth连接到以太坊私有区块链,请打开一个新终端并运行以下命令:

    $ geth attach http://127.0.0.1:8543
    

    现在,我们在Geth控制台中,我们可以与区块链进行通信。

    创建以太坊帐户

    要进行任何交易,我们需要一个帐户。在以太坊的智能合约教程的这一部分中,我们将看到如何从Geth控制台创建一个新的以太坊帐户。

    按照目前为止的步骤,我们已经在Geth控制台中。要创建新帐户,请在Geth控制台中运行以下命令:

    > personal.newAccount('seedphrase')
    

    seedphrase替换为你要为此帐户设置的密码。

    我们创建了一个新帐户,但此帐户没有ether。我们需要开始采矿。要开始挖掘,我们需要先解锁帐户。让我们解锁帐户并开始挖掘。

    > personal.unlockAccount(web3.eth.coinbase, "seedphrase")
    > miner.start()
    

    随着采矿不断发生,一些ether将被存入该账户。

    注意:这些ether是虚拟ether,没有实际价值。

    要检查帐户中的ether余额,我们将运行以下命令:

    web3.fromWei(eth.getBalance(eth.coinbase), "ether")
    

    当你定期运行此命令时,你将看到由于采矿而导致ether增加。

    要停止挖掘,请运行以下命令:

    > miner.stop()
    

    创建以太坊智能合约

    创建松露项目

    现在我们已经准备好了我们的私人区块链,我们将看到如何使用Truffle创建以太坊智能合约。在本教程中,我们将创建一个简单的“Hello World”以太坊智能合约。

    首先,让我们首先创建一个新目录来存储Truffle项目。然后在该目录中,我们将创建一个新的Truffle项目。打开一个新终端并运行以下命令:

    $ mkdir truffle
    $ cd truffle
    $ truffle init
    

    truffle init命令将创建Truffle项目所需的所有必要文件。

    现在我们已准备好部署以太坊智能合约的所有内容,让我们编写一个“Hello World”智能合约。

    撰写“Hello World”智能合约

    所有合约都应写在contracts目录中。 我们将切换到此目录并创建名为HelloWorld.sol的合约,并在此文件中添加以下行:

    pragma solidity ^0.4.15;
    contract HelloWorld {
        string public message;
        function Hello() public{
        message = "Hello World!";
        }
    }
    

    就是这个!但是这个智能合约不能单独执行。我们将不得不为它做一些配置。

    配置Truffle迁移

    要迁移我们的智能合约,我们必须在truffle目录的migrations目录中添加一个文件。在这个目录中,我们将添加一个名为2_deploy_contracts.js的文件,其中包含以下内容:

    var HelloWorld = artifacts.require("./HelloWorld.sol");
    module.exports = function(deployer) {
       deployer.deploy(HelloWorld);
    };
    

    保存并退出。

    要在我们的网络上运行Truffle,我们需要编辑truffle目录中的truffle.js文件。打开此文件并进行以下输入:

    module.exports = {
    rpc: {
    host:"localhost",
    port:8543
    },
    networks: {
    development: {
    host: "localhost", 
    port: 8543,
    network_id: "*",
    from: "0xfa2361236b5ac8079cb6cf250e5284922ed9ba9a",
    gas: 20000000
    }
    }
    };
    

    注意:将from地址替换为你在上一步中创建的帐户的地址。

    执行以太坊智能合约

    在以太坊智能合约教程的最后一节中,我们将了解如何在我们的以太坊专用网络上部署我们的Hello World智能合约。

    编译和部署智能合约

    在我们执行智能合约之前,我们必须首先将其编译并部署到我们的以太坊专用网络。我们将使用以下命令执行此操作:

    $ truffle compile
    

    现在,我们必须解锁我们的帐户并开始挖掘。使用Geth控制台返回终端并运行以下命令:

    > personal.unlockAccount(web3.eth.coinbase)
    > miner.start()
    

    然后,返回到具有truffle作为当前工作目录的终端并运行以下命令:

    $ truffle migrate
    

    等待部署完成。

    在私有以太区区块链上执行智能合约

    要执行Hello World智能合约,我们必须进入Truffle控制台。运行以下命令来执行此操作:

    $ truffle console
    

    你现在将在Truffle控制台。要执行智能合约,请运行以下命令:

    > var first_contract
    > HelloWorld.deployed().then(function(instance) { first_contract = instance; })
    > dApp.message.call()
    

    恭喜!你已经创建了第一个以太坊智能合约并执行了它。我希望这篇以太坊智能合约教程能够提供信息,并帮助你了解如何执行以太坊智能合约。现在,继续尝试编写其他智能合约并执行它。

    如果你想学习区块链并在Blockchain Technologies建立职业生涯,那么请查看我们分享的一些以太坊、比特币、EOS、Fabric等区块链相关的交互式在线编程实战教程:

    • java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
    • python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
    • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
    • 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
    • 以太坊开发进阶教程,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
    • ERC721以太坊通证实战,课程以一个数字艺术品创作与分享DApp的实战开发为主线,深入讲解以太坊非同质化通证的概念、标准与开发方案。内容包含ERC-721标准的自主实现,讲解OpenZeppelin合约代码库二次开发,实战项目采用Truffle,IPFS,实现了通证以及去中心化的通证交易所。
    • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
    • java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
    • php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
    • c#比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在C#代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是C#工程师不可多得的比特币开发学习课程。
    • EOS入门教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
    • 深入浅出玩转EOS钱包开发,本课程以手机EOS钱包的完整开发过程为主线,深入学习EOS区块链应用开发,课程内容即涵盖账户、计算资源、智能合约、动作与交易等EOS区块链的核心概念,同时也讲解如何使用eosjs和eosjs-ecc开发包访问EOS区块链,以及如何在React前端应用中集成对EOS区块链的支持。课程内容深入浅出,非常适合前端工程师深入学习EOS区块链应用开发。
    • Hyperledger Fabric 区块链开发详解,本课程面向初学者,内容即包含Hyperledger Fabric的身份证书与MSP服务、权限策略、信道配置与启动、链码通信接口等核心概念,也包含Fabric网络设计、nodejs链码与应用开发的操作实践,是Nodejs工程师学习Fabric区块链开发的最佳选择。
    • Hyperledger Fabric java 区块链开发详解,课程面向初学者,内容即包含Hyperledger Fabric的身份证书与MSP服务、权限策略、信道配置与启动、链码通信接口等核心概念,也包含Fabric网络设计、java链码与应用开发的操作实践,是java工程师学习Fabric区块链开发的最佳选择。
    • tendermint区块链开发详解,本课程适合希望使用tendermint进行区块链开发的工程师,课程内容即包括tendermint应用开发模型中的核心概念,例如ABCI接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是go语言工程师快速入门区块链开发的最佳选择。

    汇智网原创翻译,转载请标明出处。这里是以太坊智能合约之如何执行智能合约?

    展开全文
  • 要在以太坊上编写一个智能合约,所涉及的技术和组件有: Solidity,以太坊的图灵完备编程语言,用于编写智能合约。 虚拟机(Ethereum Virtual Machine,EVM),即智能合约运营的环境。 预言机(Oracle),用于链上和...
  • 使用案例:保险流程中的智能合约 智能合约的好处 安装先决条件 配置Genesis Block ... 创建以太坊智能合约 执行以太坊智能合约 https://www.jianshu.com/p/69237f98d43d?from=singlemessage ...
  • 从对以太坊一无所知,到开发第一个智能合约上线部署,最快需要多久?一个小时! 不了解区块链和智能合约,却又面临转型、转行、面试、临时任务,需要一个极简的马上可以解决关键环节的教程。当天操作学会,再阅读...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,082
精华内容 12,832
关键字:

以太坊智能合约