以太智能合约丨DAPP去中心化系统开发介绍丨交易所系统开发讲解方案

简介: 以太智能合约丨DAPP去中心化系统开发介绍丨交易所系统开发讲解方案

函数调用一般分外部调用和内部调用两种, 外部调用是通过JSON-RPC接口实现对合约函数的调用, 有3种调用方式:

testInstance.testFunc.sendTransaction();
testInstance.testFunc();
testInstance.testFunc.call();
区别如下:

testInstance.testFunc.sendTransaction() ; 会创建一个交易,调用之后会返回一个交易hash值,它会广播到网络,等待矿工打包, 它会消耗gas。
testInstance.testFunc.call() ; 它完全是一个本地调用,不会向区块链网络广播任何东西,它的返回值完全取决于 testFunc 方法的代码,不会消耗gas。
testInstance.testFunc() ; 它会比较特殊,由于有constant标识的方法不会修改状态变量,所以它不会被编译器执行。所以,如果testFunc() 有constant标识,它并不会被编译器执行,web3.js会执行call()的本地操作。相反如果没有constant标识,会执行sendTransaction()操作。
测试代码如下:

pragma solidity ^0.4.12;
contract Test {
uint public testMem;
function testFunc1() returns (string resMes){
testMem++;
resMes = "try to modify testMem,but has no constant label";
}
function testFunc2() constant returns (string resMes){
testMem--;
resMes = "try to modify testMem and has constant label";
}
}
内部调用: call,callcode,delegatecall
内部调用是指合约内调用其他合约的函数. 除了直接调用函数,还可以通过call,callcode,delegatecall的方式调用其他合约的函数,区别如下:

CALL:是在 被调用者 的上下文中执行,只能修改被调用者的storage;
CALLCODE和DELEGATECALL: 是在 调用者 的上下文中执行, 可以修改调用者的storage;
CALLCODE 阻止msg.sender和msg.value传递; 而DELEGATECALL不阻止;

在A的函数中,B.callcode(c的函数): c看到msg.sender是B;
在A的函数中,B.delegatecall(c的函数): c看到msg.sender是A;
合约示例如下:

contract D {

 uint public n;
 address public sender;
 function callSetN(address _e, uint _n) {
        // E的 storage被修改,D未修改
 _e.call(bytes4(sha3("setN(uint256)")), _n); 
 }
 function callcodeSetN(address _e, uint _n) {
        // D的 storage被修改, E未修改
 _e.callcode(bytes4(sha3("setN(uint256)")), _n); 
 }
 function delegatecallSetN(address _e, uint _n) {
        // D的storage被修改, E未修改
 _e.delegatecall(bytes4(sha3("setN(uint256)")), _n); 
 }
}
contract E {
 uint public n;
 address public sender;
 function setN(uint _n) {
 n = _n;
 sender = msg.sender;
 // D通过callcodeSetN调用, msg.sender是D . E的storage不会更新
 // 通过C.foo()调用,msg.sender是C . E的storage不会更新
 }
}
contract C {
 function foo(D _d, E _e, uint _n) {
 _d.delegatecallSetN(_e, _n);
 }
}
相关文章
|
安全 区块链
DAPP去中心化系统开发|DAPP质押模式系统开发(方案需求)
智能合约是一种以代码形式存在的合约,旨在在去中心化网络上执行和实施
|
区块链 安全 开发者
DAPP开发|IPPSwap去中心化智能合约系统开发
区块链的网络是一个由众多节点组成的分布式系统,每个节点都具有高度自治的特征
|
算法 区块链
去中心化DAPP交易所系统开发方案与指南
去中心化带来的透明交易,不仅仅是简单地向参与者展示交易信息,更是为参与者提供了保障合法权益的机制。
|
安全 区块链
defi/dapp矿机算力系统开发(智能合约)
去中心化应用是基于智能合约的应用程序,通过让用户自己控制他们的数据和资产
|
存储 安全 算法
DAPP合约系统开发|DAPP去中心化模式系统开发(成熟技术)
透明度和灵活性:任何区块链用户都可以评估合约逻辑和底层机制
|
存储 算法 区块链
GRETT格莱特智能合约系统开发|格莱特质押模式系统开发DAPP技术搭建
“去中心化”是区块链的典型特征之一 The liquidity providers provide the pool with the two
|
区块链 数据库 开发者
数字货币去中心化交易所系统开发(详细功能)/案例设计/程序逻辑/成熟技术丨数字货币去中心化交易所开发源码项目
区块链技术,也被称之为分布式账本技术,是一种互联网数据库技术,其特点是去中心化、公开透明,让每个人均可参与数据库记录。区块链技术不是一个单项的技术,而是一个集成了多方面研究成果基础之上的综合性技术系统。There are three indispensable core technologies:consensus mechanism,Cryptography principle and distributed data storage.
DAPP去中心化交易所系统开发详细功能丨DAPP去中心化钱包系统开发规则详细/成熟技术/源码说明
 A smart contract is a computer program that runs on a blockchain. Programs include functions and data (also known as variables or parameters), which operate on data. The data used by the function needs to be stored in the computer's memory
|
安全 区块链
DAPP去中心化交易所系统开发(开发项目)丨DAPP去中心化交易所系统开发(详细案例)/源码功能
  智能合约是区块链DApp的重要组成部分,是实现区块链DApp商业逻辑的基础。因此,设计智能合约应该根据业务需求进行规划,明确合约的功能和业务流程。
|
存储 安全 前端开发
中心化交易平台开发:如何构建一个有效的数字货币交易所系统
随着加密货币市场的飞速增长,许多企业都在寻找有效的解决方案,以使其加密货币交易项目取得成功。而在这里,UI/UX 的作用无疑是巨大的。系统的运行方式完全取决于界面的简洁性、导航的有效性和用户旅程的顺畅性。 对于那些选择构建集中式加密交换系统的人来说,设计尤为重要。人们经常在没有丰富交易经验的情况下使用此类平台,因此应尽可能清晰直观。但是,如何为观众提供既简单又有效的交流方式呢? 这篇文章将解释集中交换,提供一些示例,并揭示如何设计这样一个系统来应对最常见的 UI/UX 挑战。
中心化交易平台开发:如何构建一个有效的数字货币交易所系统