精华内容
下载资源
问答
  • 区块链智能合约

    2019-03-15 10:00:35
    区块链智能合约 联盟链场景智能合约应用 solidity 语言的常见问题
  • Vitalik-在台湾的演讲:区块链智能合约和以太坊 讲述关于区块链智能合约和以太坊的关系
  • 区块链实现智能合约

    千次阅读 2018-07-03 11:45:57
    区块链实现智能合约一、制定生成智能合约1、首先参与智能合约的用户必须先注册成为区块链的用户,区块链返回给用户一对公钥和私钥。公钥做为用户在区块链上的账户地址,私钥做为操作该账户的唯一钥匙。2、两个以两个...

             区块链实现智能合约

    一、制定生成智能合约

    1、首先参与智能合约的用户必须先注册成为区块链的用户,区块链返回给用户一对公钥和私钥。公钥做为用户在区块链上的账户地址,私钥做为操作该账户的唯一钥匙。

    2、两个以两个以上的用户根据需要,共同商定了一份承诺合约。合约中包含了双方的权利和义务;这些权利和义务以电子化的方式设计记录下来。

    参与者分别用各自私钥进行签名,以确保合约的有效性。

    3、签名后的智能合约,将会在区块链网络中广播出去


    二、传输并存储智能合约

    1、交易双方达成合约之后,合约通过P2P方式在区块链全网中广播,每个节点都会收到一份合约。区块链中的验证节点将会收到广播的合约,收到之后会先保存到内存中,等待共识时间的到来。

    2、共识时间到来之后,验证节点会把该时间区间内收到的所有合约打包成一个合约集合Set;并计算该集合Set的Hash值;将合约集合Hash值封装在一个区块结构里,然后广播该区块结构。

    3、其他验证节点收到该区块结构后,会分解出该结构里合约集合Hash值,与本验证节点Hash集合下的Hash值做比较;再发送一份本验证节点认可的合约集合给其他节点,通过这种多轮的发送和比较;所有的验证节点最终在规定的时间内对最新的合约集合达成一致。

    4、最新达成的合约集合会以区块的形式扩散到全网。每个区块包含以下信息:当前区块的Hash值、前一区块的Hash值、达成共识时的时间戳、以及其它描述信息;同时区块链最重要的信息是带有一组已经达成共识的合约集;收到合约集的节点,都会对每条合约进行验证,验证通过的合约才回最终写入区块链中,验证的内容主要是合约参与者的私钥签名是否与账户匹配。

    区块链节点格式:

     

     

     

    三、智能合约执行

    1、智能合约会定期检查自动机状态,逐条遍历每个合约内包含的状态机、事务以及触发条件;将条件满足的事务推送到待验证的队列中,等待共识;未满足触发条件的事务将继续存放在区块链上。

    2、进入最新轮验证的事务,会扩散到每一个验证节点,与普通区块链交易或事务一样,验证节点首先进行签名验证,确保事务的有效性;验证通过的事务会进入待共识集合,等大多数验证节点达成共识后,事务会成功执行并通知用户。

    3、事务执行成功后,智能合约自带的状态机会判断所属合约的状态,当合约包括的所有事务都顺序执行完后,状态机会将合约的状态标记为完成,并从最新的区块中移除该合约;反之将标记为进行中,继续保存在最新的区块中等待下一轮处理,直到处理完毕;整个事务和状态的处理都由区块链底层内置的智能合约系统自动完成,全程透明、不可攥改

     

     

    发送数据包内容:

    1、在交易双方签名完智能合约之后,将广播该智能合约到区块链网络中

    2、验证节点在共识时间到来后,会广播一个包含合约集合Hash值的区块结构

    3、其他验证节点发送一份本验证节点认可的合约集合

    4、以区块结构形式发送最新达成的合约集合到全网

     

     


    展开全文
  • 区块链智能合约和以太坊 .pptx
  • 智能合约的出现,使区块链不仅能处理简单的转账功能,还能实现复杂的业务逻辑,极大地推动了区块链技术发展,加速应用落地。 通过智能合约语言Solidity,实现了共识逻辑的自定义。基于区块链的分布式应用(dapp)的...

    一、 智能合约的出现

    智能合约的出现,使区块链不仅能处理简单的转账功能,还能实现复杂的业务逻辑,极大地推动了区块链技术发展,加速应用落地。

    通过智能合约语言Solidity,实现了共识逻辑的自定义。基于区块链的分布式应用(dapp)的底层技术就是“区块链+智能合约”。第一个结合了区块链与智能合约技术的平台--以太坊的诞生,被认为是开启了"区块链2.0"时代。

    二、智能合约的全链路

    开发、编译、部署、调用

    三、智能合约的分类

    • Solidity合约
    • Precompiled合约

    四、Solidity合约代码结构

    • 状态变量:状态变量是永久存储在合约中的值

    • 构造函数:用于部署并初始化合约

    • 事件:事件是能方便地调用以太坊虚拟机日志功能的接口

    • 修饰器:函数修饰器可以用来改变函数的行为,比如自动检查,类似Spring的AOP

    • 函数:函数是合约中代码的可执行单元

    五、CRUD合约

    基于预编译合约和分布式存储设计的CRUD合约接口。

    用户可以直接在合约中引用CRUD接口文件Table.sol,并在Solidity合约中调用CRUD接口。CRUD合约的开发完全遵从数据库的操作习惯,更容易理解和上手。

    六、Solidity和Java的全链路对比

    图片

    Solidity与Java的不同之处在于,Solidity是服务于区块链的语言,代码在区块链上执行。EVM是区块链上的一个执行器。每个区块链节点都有一个EVM。Solidity在EVM中被执行后,EVM对区块链的数据进行了改变。这些数据的改变交由共识算法去共识。同时,Solidity的操作仅限于EVM内部,不能访问外部不确定系统或数据,如系统时钟,网络文件系统等。

    Solidity的设计目的,是给区块链提供一套统一的逻辑,让相同的代码跑在区块链的每个节点上,借助共识算法,让区块链的数据以统一的方式进行改变,达到全局一致的结果。

    七、Solidity的运行细节

    以此处的Demo合约为例,合约中有一个全局变量m,并有一个函数add(),实现给全局变量m增加x数值的功能。

    图片

    在合约二进制被部署到区块链上后,通过发送交易调用合约里的方法。节点根据交易将合约代码装载入EVM中,并根据交易的传参执行合约上相应的函数add()。

    EVM执行合约代码,从区块链上读入当前区块的数据,进行相加操作,并将结果写入下一个区块(等待共识的区块)对应的状态数据中。

    此后,共识算法将待执行的区块共识落盘,区块高度增加,区块链上的数据完成更新。

    这段Solidity代码的功能是存取_num字段。该字段被称为“状态变量”,会由区块链持久存储。

    用户可以将这段代码部署在以太坊或类似的区块链上,部署成功就意味着该智能合约不可再被修改,只要底层区块链不被销毁,这段合约就一直存在。任何人都可通过“合约地址”来调用该合约接口,每次调用信息都会被记录在链上。

    在讲解这段代码如何运行之前,我们先回顾下传统java程序的运行方式。

    首先,用户编译完java代码后,会以字节码的形式保存在磁盘上;然后用户会调用程序,这由JVM来托管执行;程序执行期间可能会通过日志来记录调用参数,也可能会和磁盘进行IO。

    Solidity的执行与此类似。不同的是介质由硬盘换成了区块链,由单机变为分布式。

    代码部署后,以字节码的形式存储在每一个节点上。当用户要求调用某个函数时,调用请求将会被囊括在交易中,并被打包到某个区块上,一旦全网对该区块形成共识,就意味着调用是合法的。

    接下来,EVM会来调用字节码,它负责存取底层的状态变量,好比传统编程的IO。

    图片

    光从代码来看,合约开发似乎不过如此,单个合约只需要围绕着字段进行操作,对于很多简单业务而言,不过是CRUD而已。

    但其复杂性也恰恰在于此,合约在区块链环境上执行,是不可修改的。

    所以如果出现了bug,就必须部署新的合约,这对于合约的可维护性提出了挑战。并且,一旦业务复杂起来,容易出现安全漏洞,导致链上资产损失。同时,还要考虑完成代码编写、逻辑执行、数据存储的成本问题。

    综上所述,写合约不难,但写好合约,却需要一定功底。

    八、智能合约的本质

    所谓“合约”,就是条文、合同一类的东西,里面记录了发生的条件与对应执行的条款,以支持确权等操作;所谓"智能",就意味着自动化、可编程。

    所以,智能合约就是可编程的合同,也可以理解为一段自动执行的条文合同,在计算机中,就是一段自动执行的程序片段。它更易于合约保存,并且由确定的算法运行,给定输入,就得到对应的输出,极大保障了合约的执行力。

    以自动售货机做类比,可以帮助我们更好地理解智能合约的核心特征。

    当使用者选择好要购买的货物并完成支付,出货逻辑就会被触发,用户就能得到想要的货物,而这个过程不需要人工介入,节省了售卖货物的人力成本。如果要破坏这个合约,就得物理破坏售卖机。像POS刷卡机、EDI(电子数据交换)等,也可作此种类比。

    九、智能合约与区块链

    智能合约在上世纪被提出,而区块链2009年才诞生,就定义而言,智能合约与区块链关系不大。

    那为什么在这10年中,智能合约与区块链却产生了如此紧密的关联?因为区块链可以保证智能合约的不可篡改,不仅合约内容不可篡改,每次调用记录亦不可篡改。

    智能合约产生价值的最基本前提是有一个强有力的底层介质用于储存,让其不可被物理破坏。

    然而,智能合约的本体是一份代码,非常容易被篡改,如何为其提供强力的存储介质就成了问题。这正好是区块链擅长解决的——通过比特币的实践,证明了区块链可以在分布式环境下让电子记录不可被篡改。

    与此同时,智能合约也在反哺着区块链,它极大地扩展了区块链的业务场景。

    与智能合约结合后,区块链不再服务于单一的货币支付,可以延申到生活中的方方面面。丰富的应用场景也对区块链的能力产生了新的挑战。

    十、不同平台的智能合约

    公有链

    图片

    联盟链

    采用chaincode的Fabric,大部分平台都采用Solidity作为智能合约语言。

    除了Solidity,WebAssembly、Libra的Move等一些智能合约语言也在发展中,可以保持关注。

    展开全文
  • 区块链智能合约入门

    千次阅读 2019-12-05 14:26:08
    区块链智能合约入门 第一步 安装环境 首先这里写的合约是指solidity合约,使用Remix IDE。所以我们第一步就是安装Remix IDE。remix ide是开发以太坊智能合约的神器,支持网页在线编写、部署和测试智能合约。网址...

    区块链之智能合约入门

    第一步 安装环境

    首先这里写的合约是指solidity合约,使用Remix IDE。所以我们第一步就是安装Remix IDE。remix ide是开发以太坊智能合约的神器,支持网页在线编写、部署和测试智能合约。网址http://remix.ethereum.org
    可以选择先跳过安装环境这一步,直接使用在线的http://remix.ethereum.org

    我这边的测试环境是kali-linux
    安装的指令为

    git clone https://github.com/ethereum/remix-ide.git
    cd remix-ide
    sudo npm install
    npm run build && npm run serve
    

    注意:一定要sudo npm install,一定要sudo npm install,一定要sudo npm install,重要的事情说三遍,本人在这里踩了一次坑了
    一般kali是不会自带npm这个东西的,所以我们需要先安装npm
    NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题

    Linux安装NPM指令(如果是非Linux建议查看Node.js的菜鸟教程,链接为 https://www.runoob.com/nodejs/nodejs-install-setup.html)

    wget https://nodejs.org/dist/v10.9.0/node-v10.9.0-linux-x64.tar.xz    // 下载
    tar xf  node-v10.9.0-linux-x64.tar.xz       // 解压
    cd node-v10.9.0-linux-x64/                  // 进入解压目录
    ./bin/node -v                               // 执行node命令 查看版本
    

    解压文件的 bin 目录底下包含了 node、npm 等命令,我们可以使用 ln 命令来设置软连接:

    ln -s /root/node-v10.9.0-linux-x64/bin/npm   /usr/local/bin/
    ln -s /root/node-v10.9.0-linux-x64/bin/node   /usr/local/bin/
    ln -s /root/node-v10.9.0-linux-x64/bin/npx   /usr/local/bin/
    

    这边前一个路径是你node.js下载到本地的路径

    这样表示成功建立软连接,可以使用npm了。
    当然,不建立软连接也可以直接使用,只要进入到npm所在的目录下即可

    然后开始执行我们一开始的安装Remix IDE的命令
    这边如果运行报错可能是因为在执行到npm run build的时候提示错误,没有找到模块fast-async模块,一般不会,如果前面你是sudo install的话,因为没有加sudo的话会出现下面的错误

    npm ERR! Error: EACCES: permission denied, access
    

    如果出现cannot find module ‘xxx’,说明你缺xxx模块,你需要做的就是输入命令sudo npm install xxx.之后将会自动下载安装,如果提示不成功,再来一遍

    接下来如果一切正常的话就可以npm run build

    npm run serve

    然后访问即可

    环境部署成功

    第二步 编写第一个HelloWorld

    Solidity是以太坊智能合约编程语言,所以在这之前需要对Solidity一些基本的语法进行一些了解,我是通过http://www.tryblockchain.org/这个网站进行初步简单的学习的

    这边在网上找了个log函数,方便等会看是否成功调用

    pragma solidity ^0.5.11;
    
    //通过log函数重载,对不同类型的变量trigger不同的event,实现solidity打印效果,使用方法为:log(string name, var value)
    
    
    contract Console {
        event LogUint(string, uint);
        function log(string memory s , uint x) internal {
        emit LogUint(s, x);
        }
    
        event LogInt(string, int);
        function log(string memory s , int x) internal {
        emit LogInt(s, x);
        }
    
        event LogBytes(string, bytes);
        function log(string memory s , bytes memory x) internal {
        emit LogBytes(s, x);
        }
    
        event LogBytes32(string, bytes32);
        function log(string memory s , bytes32 x) internal {
        emit LogBytes32(s, x);
        }
    
        event LogAddress(string, address);
        function log(string memory s , address  x) internal {
        emit LogAddress(s, x);
        }
    
        event LogBool(string, bool);
        function log(string memory s , bool x) internal {
        emit LogBool(s, x);
        }
    }
    
    pragma solidity ^0.5.11;
    import "browser/Console.sol";
    
    
    contract HelloWorld is Console{
        function getFlag(uint amount) public returns (string memory){
            bytes memory flag="flag{asf54654v98x7v}";
            if(amount>100){
                log("give you flag!",flag);
            }
            uint state=0;
            log("no flag!",state);
        }
    }
    

    这边就是通过读取参数输入的新值,如果amout大于100,那么就打印出flag
    项目结构

    编译合约时有些蒙,后来发现应该用火狐浏览器,安装MetaMask,可以在火狐浏览器的插件中直接搜索安装,如果不行的话可以自行百度一下另外的安装方法。

    在这边添加这个模块

    选择Environment为Injected Web3,然后Remix IDE会请求连接到你的MetaMask钱包里的账号

    然后添加Solidity compiler模块

    对我们的HelloWorld进行编译

    编译成功后这边会有绿色箭头,如果编译失败可以看编译详细,查看错误原因

    然后回到这边就可以看到这边出现了我们编译好的HellloWorld。

    如果之前没有部署过这个合约就点击下方橙色框Deploy,此时会跳出支付gas的弹窗,点击确定即可

    等待几秒合约就会部署完成,最下方就会显示已部署的合约(及其地址);如果之前部署过相同合约,那么可以将合约地址复制到At Address并点击蓝色按钮加载合约,效果相同。

    这边这个橙色getFlag就是合约里的函数,输入一个金额,并点击橙色按钮就可以调用此函数了只要大于100就会打印flag,通过ropsten.etherscan.io可以查到此合约的交易和事件。

    输入101,点击getFlag,然后确认即可

    这边会自动转成16进制打印出来。

    第三步 加载已部署合约

    首先我们部署好的合约地址是可以在这边看到

    如果是我们自己要加载我们自己的合约的话,可以直接通过第二步说的At Address加载

    点击At Address即可
    以上都是在remix下测试的,如果我们要加载他人的合约就需要在geth下测试

    第四步 和已知合约地址交互

    这边首先获得一个我们部署好的合约地址,记录下来

    在这边声明函数原型

    编译完成后这边会出现我们编译好的test.sol

    在At Address中填入我们之前记录下来的合约地址,点击蓝色的At Address

    这边就已经实现交互了

    这边可以看到我们成功和合约进行了交易,点进去查看具体事件

    发现成功打印了flag,证明我们成功调用了合约中的getFlag函数实现了和合约的交互

    展开全文
  • [云框架]基于区块链智能合约 / Blockchain, Fabric Hyperledger, Smart Contract / 区块链, Fabric Hyperledger, 智能合约
  • 区块链账本、智能合约和最近的智能法律合约(后两者建立在区块链上)的固有优势以及因此越来越多的采用,已经在广泛的经济领域引起了并且现在正在加速根本性的范式转变在社会的某些领域,这越来越多地取代传统的...
  • 区块链智能合约

    万次阅读 2019-04-07 01:02:08
    区块链技术的去中心化账本功能可以被用来注册、确认、转移各种不同类型的资产及合约。所有的金融交易都可以被改造成在区块链上使用,包括股票、私募股权、众筹、债券、对冲基金和所有类型的金融衍生品:期货、...

    区块链1.0应用以比特币为代表,为了解决货币和支付手段的去中心化,那么区块链2.0就是更宏观的对整个市场的去中心化,利用区块链技术来转换许多不同的资产而不仅仅是比特币,通过转让来创建不同资产单元的价值。

    区块链技术的去中心化账本功能可以被用来注册、确认、转移各种不同类型的资产及合约。所有的金融交易都可以被改造成在区块链上使用,包括股票、私募股权、众筹、债券、对冲基金和所有类型的金融衍生品:期货、期权等。

    金融服务: 区块链的一个重要方向是利用数字货币与传统银行和金融市场做对接。

    Ripple Labs正在使用区块链技术来重塑银行业生态系统,使用Ripple支付网络可以让多国银行直接进行转账和外汇交易,而不需要第三方中介。Ripple也开发了一个智能合约和自己的程序语言Codius。

    Paypal在做比特币和传统金融和支付市场对接的解决方案。

    BTCjam在做基于区块链的去中心化P2P借贷。

    Overstock在做基于区块链的去中心化证券交易所Medici。

    智能资产: 区块链可以用于任何资产注册、存储和交易,包括金融、经济和货币的各个领域;有形资产、无形资产。区块链开辟了不同类型各个层次的行业运用功能,涉及货币、市场和金融交易。使用区块链编码的资产通过智能合约成为智能资产。

    智能资产是指所有以区块链为基础的可交易的所有资产类型,包括有形和无形资产。智能资产通过区块链控制所有权。并通过合约来符合现有法律,比如:预先建立的智能合约能够当某人已经偿还全部贷款后,自动将车辆所有权从财务公司转让到个人名下,这个过程是全自动的。 智能资产有可能让我们构建无须信任的去中心化资产管理系统。

    智能合约: 智能合约意味着区块链交易远不止买卖货币这些交易,将会有更广泛的指令嵌入到区块链中。传统合约是指双方或者多方协议做或不做某事来换取某些东西,每一方必须信任彼此会履行义务。而智能合约无须彼此信任,因为智能合约不仅是由代码进行定义的,也是由代码强制执行的,完全自动且无法干预。

    众筹: 基于区块链的众筹平台支持初创企业通过创建自己的数字货币来筹集资金,分发自己的“数字股权”给早期支持者,这些数字货币作为支持初创公司应获股份的凭证。

    比特币预测市场: 通过对现实生活中可能发生的事情进行结果预测,比如选举、体育赛事等。

    无须信任的借贷: 区块链的去信任机制网络是智能资产和智能合约发展的重要推动因素。这让不认识的人在互联网上把钱借给你,而你可以将你的智能资产作为抵押,这必然大幅降低借贷成本让借贷更具竞争力。非人为干预的机制也让纠纷率大大降低。

    以太坊:图灵完备的虚拟机 区块链技术将多个领域内的概念和操作结合在一起,包括计算、通讯网络、加密学和人工智能。 在区块链2.0中,我们需要通过智能合约和智能资产来记录和转移更多复杂的资产类型,我们就需要第三步—更强大的脚本系统—最终实现图灵完备(能够运行任何货币、协议和区块链)。以太坊就是一个区块链为基础的项目,旨在提供一个图灵完备脚本语言和图灵完备平台。

    展开全文
  • pet-shop-blockchain:尝试了解区块链智能合约
  • 详解区块链智能合约

    千次阅读 2018-08-28 10:58:00
    智能合约的历史 在全面阐述什么是智能合约之前,我们先回顾一下它创建的历史背景,有助于理解它的...虽然有它的好处,但智能合约的想法一直未取得进展——主要是缺乏可以让它发挥出作用的区块链。 什么是智能合约 ...
  • 智能合约又称智能合同,是由事件驱动的、具有状态的、获得多方承认的、运行在区块链之上的、且能够根据预设条件自动处理资产的程序,智能合约最大的优势是利用程序算法替代人仲裁和执行合同。 简单说,智能合约是一...
  • JH/CIE 1592020 国 电 子 学 会 标 准 JH/CIE 1592020 基于区块链智能合约形式化表达规范 Formal Expression Specification of Smart Contract Based on Blockchain 征求意见稿 JH/CIE 1592020 目 次 前 言 1 ...
  • Cryptopool.github.io Cryptopool使用Tron区块链实现智能合约投资
  • [云框架]基于区块链智能合约 v1.0https://github.com/cloudframeworks-blockchain/user-guide-fabric-smart-contract本篇云框架通过Fabric Hyperledger
  • BC之SC:区块链智能合约——与传统合约的比较以及智能合约模型部署原理、运行原理相关配图 目录 SC与传统合约的比较 SC模型部署原理、运行原理 SC与传统合约的比较 1、传统合约VS智能合约 特点...
  • 区块链智能合约的讲解

    千次阅读 2020-10-19 11:54:44
    智能合约是在区块链上运行的应用或者程序。通常情况下,智能合约是一组具有特定规则的数字化协议,且这些协议能够强制化执行。这些规则由计算机代码预先定义,所有节点会复制和执行这些计算机源码。 智能合约不需要...
  • 基于区块链智能合约安全

    千次阅读 2018-09-12 10:14:34
    智能合约是自我执行合约,在智能合约中,合约条款由代码规定。基本上,这意味着可以用计算机程序编写具有法律效力的合约,而且这个合约可以自动执行。 至少在1996年Nick Szabo 就提出了这一概...
  • 行业分类-物理装置-基于区块链智能合约部署方法、装置及硬件设备.zip
  • #资源达人分享计划#
  • solidityintro:在Stephen Grider的区块链智能合约,Solidity和以太坊入门课程之后
  • #资源达人分享计划#
  • 是比特币的原理介绍文档,介绍了比特币的基本原理,是了解,学习比特币的最基础的资料
  • 智能合约(smart contract)这个术语至少可以追溯到 1995 年,是由多产的跨领域法 律学者尼克·萨博(Nick Szabo)提出来的。他的定义是“一个智能合约是一套以数字形式 定义的承诺(promises) ,包括合约参与方...
  • #资源达人分享计划#
  • #资源达人分享计划#
  • 22个PPT深度剖析以太坊技术核心及最新进展,PPT内容涵盖以太坊技术原理、架构、工具;智能合作&DAPP;开发;安全与隐私;社区建设等最新技术进展,更有一大波基于以太坊的应用整装待发。
  • 活动内容:矩阵元“微信群线上语音课程”开播了,无地域限制,只需加入矩阵元“区块链核心技术开发交流群” 即可在线免费学习区块链智能合约。 区块链大热,区块链技术人才身价倍增。智能合约作为区块链的核心技术...
  • 智能合约是用于信息传递、验证或合同执行的计算机协议。通过智能合约,可以在...智能合约同时也比区块链概念发生得早一直到2008年为止才创造了采用智能合约所需的区块链技术,并于2013年作为以太坊智能合约系统的一部.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,542
精华内容 16,216
关键字:

区块链中智能合约