DAPP马蹄链合约模式系统开发详情
去中心化应用程序(DApps)【181 开发 2591 系统 3365】是在区块网络之上运行的应用程序。有各种各样的DApp具有不同的用例,例如、金融、社交媒体等。
尽管DApp看起来与您手机上的常规移动应用程序相似,但它们的后端系统却有所不同。DApp依靠分布式网络上的智能合约而不是集中式系统来运行。它使它们更加透明、去中心化和抵抗攻击,但也带来了一些新的挑战。
介绍
自十多年前比特(C)诞生以来,区块已经发展到解锁货以外的许多新功能和用例。这些新途径之一是构建去中心化应用程序(DApps)以使用区块技术来增强许多传统部门和服务。
什么是去中心化应用程序(DApps)?
去中心化应用程序(DApps)是智能合约驱动的数字应用程序或程序,运行在区块而不是集中式服务器上。它们的外观和感觉类似于您智能手机上的常规移动应用程序,并提供从到金融、社交媒体等各种服务和功能。
顾名思义,DApp运行在分散的点对点网络上。一份早期报告表明,DApp具有以下特点:
开源:DApps的源代码对公众开放,意味着任何人都可以验证、使用、复制和修改它们。没有一个实体可以控制其大部分硬或代。用户也可以对DApp的更改提出建议和投票。
去中心化和加密安全:为确保数据安全,DApp的所有信息都经过加密保护并存储在由多个用户(或节点)维护的公共去中心化区块上。
代化系统:可以使用加密代访问DApp。他们可以采用ETH等加密货,或使用共识算法生成原生代,例如工作量证明(PoW)或权益证明(PoS)。该代还可用于奖励矿工和质押者等贡献者。DApp是什么
DApp(Decentralized Application)即分布式应用或去中心化应用。DApp就是智能合约+App。
一个真正的DApp应用,需要同时满足以下几个条件:
应用必须完全开源、自治,且没有一个实体控制该应用超过51%的-Token。该应用必须能够根据用户的反馈及技术要求进行升级,且应用升级必须由大部分用户达成共识之后方可进行;
应用的数据必须加密后存储在公开的区块链上;
应用必须拥有Token机制,矿工或应用维护节点需得到代币奖励;
应用代币的产生必须依据标准的加密算法,有价值的节点可以根据该算法获取应用的代币奖励。
直接调用:这是一种特殊调用,可以说是前两种调用的结合,因为当合约方法有constant修饰时,直接调用会等同于call,否则等同于sendTransaction。
var winIdx=(Math.random()****nfig.pieceCount)>>0;
//后台调用infura部署的合约必须用sendRawTransaction
var coder=require('web3/lib/solidity/coder');
var CryptoJS=require('crypto-js');
var Tx=require('ethereumjs-tx');
var privateKey=new Buffer("71112e795325d5cbf14d665091ce4626f26c8342b8038f1adcdfff26be04a220",'hex');
var functionName='finishRound';
var types=['uint'];
var args=[winIdx];
var fullName=functionName+'('+types.join()+')';
var signature=CryptoJS.SHA3(fullName,{outputLength:256}).toString(CryptoJS.enc.Hex).slice(0,8);
var dataHex=signature+coder.encodeParams(types,args);
var data='0x'+dataHex;
var account="0x4BEB9EA54fc912B619D5C682BA1cB3524bc80955";
var nonce=web3.toHex(web3.eth.getTransactionCount(account));
var gasPrice=web3.toHex(web3.eth.gasPrice);
var gasLimitHex=web3.toHex(3000000);
var rawTx={'nonce':nonce,'gasPrice':gasPrice,'gasLimit':gasLimitHex,'from':account,'to':contractAddress,'data':data}
var tx=new Tx(rawTx)
tx.sign(privateKey)
var serializedTx='0x'+tx.serialize().toString('hex')
web3.eth.sendRawTransaction(serializedTx,function(err,txHash){
if(!err){
console.log(JSON.stringify({"transactionHash":txHash}));
}else{
console.log("finish round error"+err);
}
});
DApp原理
一个DApp被调用之前需要先部署到以太坊上,不管是私链,公链还是联盟链。故本章节分为两部分,DApp部署原理和调用原理。
部署
一个DApp由多个智能合约组成,部署一个DApp也就是同时部署多个智能合约,这里讲述一下部署一个智能合约的流程。
以太坊Web3.js提供调用合约的方法一共有四种:
call:这是简单的调用方式,适用于调用只读的方法,也就是调用过程不会修改区块链上的数据,因为它只读取本地数据即可,因此不会消耗gas,而且可以立刻获得返回值,适用于前端调用,具体例子如下。
//合约声明
contract test{
function multiply(uint a)returns(uint d){
return a*7;
}
}
//合约调用
var Multiply7=et***ntract(con***.abiDefinition);
var myMultiply7=Multiply7.at(address);
myMultiply7.multiply.call(3)
sendTransaction:可调用读或写方法,调用过程会创建一个交易,调用之后会返回一个交易hash值,它会广播到网络,等待矿工打包,它会消耗gas,而且该调用不能立刻获得返回值,只能从event log中获取,也是适用于前端调用
尽管DApp看起来与您手机上的常规移动应用程序相似,但它们的后端系统却有所不同。DApp依靠分布式网络上的智能合约而不是集中式系统来运行。它使它们更加透明、去中心化和抵抗攻击,但也带来了一些新的挑战。
介绍
自十多年前比特(C)诞生以来,区块已经发展到解锁货以外的许多新功能和用例。这些新途径之一是构建去中心化应用程序(DApps)以使用区块技术来增强许多传统部门和服务。
什么是去中心化应用程序(DApps)?
去中心化应用程序(DApps)是智能合约驱动的数字应用程序或程序,运行在区块而不是集中式服务器上。它们的外观和感觉类似于您智能手机上的常规移动应用程序,并提供从到金融、社交媒体等各种服务和功能。
顾名思义,DApp运行在分散的点对点网络上。一份早期报告表明,DApp具有以下特点:
开源:DApps的源代码对公众开放,意味着任何人都可以验证、使用、复制和修改它们。没有一个实体可以控制其大部分硬或代。用户也可以对DApp的更改提出建议和投票。
去中心化和加密安全:为确保数据安全,DApp的所有信息都经过加密保护并存储在由多个用户(或节点)维护的公共去中心化区块上。
代化系统:可以使用加密代访问DApp。他们可以采用ETH等加密货,或使用共识算法生成原生代,例如工作量证明(PoW)或权益证明(PoS)。该代还可用于奖励矿工和质押者等贡献者。DApp是什么
DApp(Decentralized Application)即分布式应用或去中心化应用。DApp就是智能合约+App。
一个真正的DApp应用,需要同时满足以下几个条件:
应用必须完全开源、自治,且没有一个实体控制该应用超过51%的-Token。该应用必须能够根据用户的反馈及技术要求进行升级,且应用升级必须由大部分用户达成共识之后方可进行;
应用的数据必须加密后存储在公开的区块链上;
应用必须拥有Token机制,矿工或应用维护节点需得到代币奖励;
应用代币的产生必须依据标准的加密算法,有价值的节点可以根据该算法获取应用的代币奖励。
直接调用:这是一种特殊调用,可以说是前两种调用的结合,因为当合约方法有constant修饰时,直接调用会等同于call,否则等同于sendTransaction。
var winIdx=(Math.random()****nfig.pieceCount)>>0;
//后台调用infura部署的合约必须用sendRawTransaction
var coder=require('web3/lib/solidity/coder');
var CryptoJS=require('crypto-js');
var Tx=require('ethereumjs-tx');
var privateKey=new Buffer("71112e795325d5cbf14d665091ce4626f26c8342b8038f1adcdfff26be04a220",'hex');
var functionName='finishRound';
var types=['uint'];
var args=[winIdx];
var fullName=functionName+'('+types.join()+')';
var signature=CryptoJS.SHA3(fullName,{outputLength:256}).toString(CryptoJS.enc.Hex).slice(0,8);
var dataHex=signature+coder.encodeParams(types,args);
var data='0x'+dataHex;
var account="0x4BEB9EA54fc912B619D5C682BA1cB3524bc80955";
var nonce=web3.toHex(web3.eth.getTransactionCount(account));
var gasPrice=web3.toHex(web3.eth.gasPrice);
var gasLimitHex=web3.toHex(3000000);
var rawTx={'nonce':nonce,'gasPrice':gasPrice,'gasLimit':gasLimitHex,'from':account,'to':contractAddress,'data':data}
var tx=new Tx(rawTx)
tx.sign(privateKey)
var serializedTx='0x'+tx.serialize().toString('hex')
web3.eth.sendRawTransaction(serializedTx,function(err,txHash){
if(!err){
console.log(JSON.stringify({"transactionHash":txHash}));
}else{
console.log("finish round error"+err);
}
});
DApp原理
一个DApp被调用之前需要先部署到以太坊上,不管是私链,公链还是联盟链。故本章节分为两部分,DApp部署原理和调用原理。
部署
一个DApp由多个智能合约组成,部署一个DApp也就是同时部署多个智能合约,这里讲述一下部署一个智能合约的流程。
以太坊Web3.js提供调用合约的方法一共有四种:
call:这是简单的调用方式,适用于调用只读的方法,也就是调用过程不会修改区块链上的数据,因为它只读取本地数据即可,因此不会消耗gas,而且可以立刻获得返回值,适用于前端调用,具体例子如下。
//合约声明
contract test{
function multiply(uint a)returns(uint d){
return a*7;
}
}
//合约调用
var Multiply7=et***ntract(con***.abiDefinition);
var myMultiply7=Multiply7.at(address);
myMultiply7.multiply.call(3)
sendTransaction:可调用读或写方法,调用过程会创建一个交易,调用之后会返回一个交易hash值,它会广播到网络,等待矿工打包,它会消耗gas,而且该调用不能立刻获得返回值,只能从event log中获取,也是适用于前端调用