Uniswap交易所开发稳定版丨Uniswap交易所系统开发(开发模板)丨Uniswap交易所系统源码案例部署

简介: 结合区块链技术开发游戏,重要的数据存储在区块链上,游戏运营方无法随意篡改与删除游戏数据,稀有道具内容、数量及抽签概率等算法完全公开,使得游戏数据透明化,可信任化,成为一个可信任的去中心化游戏应用;

  
  基于区块链的去中心化、不可篡改、共识算法、匿名性与跨平台等特性,区块链+游戏将带来如下变革:

  1.去中心化运营

  游戏中的各系统设置使用智能合约技术开发,游戏数据存储在区块链上,不依赖中心化服务器;

  2.数据可信任

  结合区块链技术开发游戏,重要的数据存储在区块链上,游戏运营方无法随意篡改与删除游戏数据,稀有道具内容、数量及抽签概率等算法完全公开,使得游戏数据透明化,可信任化,成为一个可信任的去中心化游戏应用;

智能合约的结构

  合约就像一个类(class),其中包含:

  状态变量(state variable)

  函数(function)

  函数修改器(function modifier)

  事件(event)

  结构(structure)

  枚举(enum)

  示例:contract Sample

  {

  //状态变量

  uint256 data;

  address owner;

  //定义事件

  event logData(uint256 dataToLog);

  //函数修改器

  modifier onlyOwner(){

  if(msg.sender!=owner)throw;

  }

  //构造器,名字与合约名一致

  function Sample(uint256 initData,address initOwner){

  data=initData;

  owner=initOwner;

  }

  //函数

  function getData()returns(uint256 returnedData){

  return data;

  }

  function setData()returns(uint256 newData)onlyOwner{

  logData(newData);

  data=newData;

  }

  }

  代码注释:

  contract关键字:用于声明一个合约

  data和owner:是两个状态变量。data包含一些数据,owner包含所有者的以太坊钱包地址,即部署合约者的以太坊地址

  event logData定义事件logData,用于通知客户端:一旦data发生变化,将触发这个事件。所有事件都保存在区块链中。

  函数修改器:onlyOwner。修改器用于在执行一个函数之前自动检测文件。这里的修改器用于检测合约所有者是否在调用函数。如果没有,则会抛出异常。

  合约函数构造器constructor:在部署合约时,构造器用于初始化状态变量。

  function,getData()用于得到data状态变量的值,setData()用于改变data的值。

  基本类型

  除了数组类型、字符串类型、结构类型、枚举类型和map类型外,

  其他类型均称为基本类型。

  无符号型:例如uint8,uint16,uint24,…,uint256分别用于存储无符号的8位,16

  位,24位,…,256位整数

  有符号型:例如,int8,int16,…,int256分别用于存储8位,16位,24位,…,256位整数

  address类型:用于存储以太坊地址,用16进制表示。address类型有两个属性:balance和send。balance用于检测地址余额,send用于向地址发送以太币。send方法拿出需要转账那

  些数量的wei,并根据转账是否成功返回true或者false。

  注意:

  uint和int是uint256和int256的别名。

  如果一个数字超过256位,则使用256位数据类型存储该数字的近似值。

  数组:Solidity支持generic和byte两种数组类型。

  数组有length属性,用于发现数组的长度。

  注意:不可以在内存中改变数组大小,也不可以改变非动态数组大小。

  字符串类型

  有两种方法创建字符串:使用bytes和string。

  bytes用于创建原始字符串,而string用于创建UTF-8字符串

  示例:

  contract sample{

  string myString="";//string

  bytes myRawString;

  function sample(string initString,bytes rawStringInit){

  myString=initString;

  string storage myString2=myString;

  string memory myString3="ABCDE";

  myString3="imaginecode";

  myRawString=rawStringInit;

  myRawString.length++;

  }

  }

  结构类型struct

  示例

  contract sample{

  struct myStruct{

  bool myBool;

  string myString;

  }

  myStruct s1;

  myStruct s2=myStruct{true,""};

  function sample(bool initBool,string initString){

  s1=myStruct(initBool,initString);

  myStruct memory s3=myStruct(initBool,initString);

  }

  }

  注意:函数参数不可以是结构类型,且函数不可以返回结构类型。

  枚举类型enum

  示例

  contract sample{

  enum OS{OSX,Linux,Unix,windows}

  OS choice;

  function sample(OS chosen){

  choice=chosen;

  }

  function setLinux(){

  choice=OS.Linux;

  }

  function getChoice return(OS chosenOS){

  return choice;

  }

  }

  mapping类型

  mapping类型只可以存在于storage中,不存在于memory中,因此它们是作为状态变量声明的。

  mapping类型包含key/value对,不是实际存储key,而是存储key的keccak256哈希,用于查询value。

  mapping不可以被分配给另一个mapping。

  constract sample{

  mapping(int=>string)myMap;

  function sample(){

  myMap[key]=value;

  mapping(int=>string)myMap2=myMap;

  }

  }

  注意:如果想访问mapping中不存在的key,返回的value为0。

  delete操作符

  可用于操作任何类型的变量。

  对动态数组使用delete操作符,则删除所有元素,其长度变为0。

  对静态数组使用delete操作符,则重置所有索引

  对map类型使用delete操作符,什么都不会发生,但是,对map类型的一个键使用delete操作符,则会删除与该键相关的值

  示例

  contract sample{

  struct Struct{

  mapping(int=>int)myMap;

  int myNumber;

  }

  int[]myArray;

  Struct myStruct;

  function sample(int key,int value,int number,int[]array){

  myStruct=Struct(number);

  myStruct=Struct(number);

  myStruct.myMap[key]=value;//对某个键赋值

  myArray=array;

  }

  function reset(){

  delete myArray;//myArray数组长度为0

  delete myStruct;//myNumber为0,myMap不变

  }

  function deleteKey(int key){

  delete myStruct.myMap[key];//删除myMap中的某个键的值

  }

  }

  基本类型之间的转换

  隐式转换:常用。通常来说,如果没有语义信息丢失,值和类型之间可以进行隐式转换:uint8可转换为uint16,int128可转换为int256,但是int8不可转换为uint256(因为uint256不能存储,例如-1)

  Solidity也支持显式转换,如果编译器不允许在两种数据类型之间隐式转换,则可以进行显式转换。建议尽量避免显式转换,因为可能返回难以预料的结果。

  示例:

  uint32 a=0x12345678;

  uint16 b=uint16(a);//b=0x5678,将uint32类型显式转换为uint16,也就是说,把较大类型转换为较小类型,因此高位被截掉了

  var

  使用关键字var声明的变量,其变量类型根据分配给它的第一个值来动态确定。一旦分配了值,类型就固定了,所以如果给它指定另一个类型,将引起类型转换。

  int256 x=12;

  var y=x;//此时y的类型是int256

  uint256 z=9;

  y=z;//此时,报出异常,因为uint256不能转换为int256类型

  但要注意的是:

  在定义数组array和map时不能使用var。var也不能用于定义函数参数和状态变量

  控制结构

  if-else

  while

  for

  breakcontinue

  return

  ?:

  等等

  //结构上和其他语法没有什么差异

  contract sample{

  int a=12;

  int[]b;

  function sample(){

  if(a==12){}

  else if(a==34){}

  else{}

  var temp=10;

  while(temp<20)

  {

  if(temp==17){break;}

  else{continue;}

  }

  temp++;

  }

  for(var m=0;m<b.length;m++){

  }

  }

  用new操作符创建合约

  一个合约可以使用new关键字来创建一个新合约。

  例如:

  contract sample1{

  int a;

  function assign(int b){

  a=b;

  }

  }

  contract sample2{

  function sample2(){

  sample1 s=new sample1();//注意写法

  s.assign(12);

  }

  }

  异常

  异常的抛出分为自动和手动。

  若你想手动抛出异常,可以使用throw手动抛出。

  注意,异常抛出后,会撤销对状态和余额的所有改变。

  contract sample{

  function myFunction(){

  throw;

  }

  }

  函数调用

  内部函数调用:一个函数在同一个合约中调用另一个函数

  外部函数调用:一个函数调用另一个合约的函数。

相关文章
|
5月前
|
前端开发 编译器 区块链
交易所开发(海外版)丨交易所系统开发(Demo)交易所项目系统开发[方案部署]
智能合约是编程实现的不可篡改的电子合同,Dapp是结合前端、智能合约和通证经济的分布式应用。Web3.0作为区块链基础网络,以太坊(ETH)推动其发展。智能合约在ETH区块链上运行,依赖EVM。Solidity合约代码有多种导入机制,编译器通过文件前缀映射处理导入路径,如solc编译器支持命令行命名空间映射。
合约交易所系统开发(开发模板)丨合约交易所系统开发稳定版及成熟案例源码
最先运行的 _beforeTokenTransfers 和最后运行的 _afterTokenTransfers 都是由用户自定义的函数,用于实现白名单等功能
|
11月前
|
存储 安全 区块链
DAPP博饼交易所项目系统开发合约模式
Dapp是基于区块链的分散应用,采用与传统应用完全不同的设计和实现方式
|
11月前
|
自然语言处理 安全 区块链
秒合约系统开发(多语言)丨交易所秒合约系统开发(海外版)丨秒合约交易所开发源码搭建
秒合约系统开发(多语言)丨交易所秒合约系统开发(海外版)丨秒合约交易所开发源码搭建
|
12月前
|
安全 区块链
钱包交易所开发技术方案丨钱包交易所系统开发(开发案例)/详细项目/源码部署
钱包交易所开发技术方案丨钱包交易所系统开发(开发案例)/详细项目/源码部署
|
存储 安全 区块链
交割合约交易所系统开发稳定版|秒合约系统开发源码案例
web3开发的好处很多。例如,基于区块链的应用程序可能比传统的Web应用程序更安全
|
开发框架 监控 前端开发
dapp/PancakeSwap薄饼交易所发行代币合约系统开发稳定版丨成熟技术丨案例详细丨规则玩法丨源码程序
 DApp是“去中心化应用程序”的缩写,它是使用区块链技术和智能合约构建的应用程序。与传统的应用程序不同,DApp不依赖于单一实体,而是由区块链网络中的多个节点共同维护和运行。这使得DApp具有去中心化、开放、透明和安全的特点。
|
数据挖掘 API
秒合约交易所/永续合约交易所/币币交易所系统开发(开发稳定版)及案例项目/源码说明
Develop API interface for quantitative spot contract tracking system:Develop API interface in the quantitative spot contract tracking system to interface with exchange APIs.This interface needs to be designed according to the specifications and requirements of the exchange API,and ensure that it mat
|
区块链 安全
交易所系统开发(项目案例)丨交易所系统开发(规则设计)丨交易所开发源码版及说明
The Conflux public chain adopts a lightweight consensus algorithm based on Block DAG implementation, which adopts a transaction sorting method based on DAG structure, namely Unconfirmed Transaction DAG (U-DAG), to sort and confirm the transactions of each block in the public chain.
|
存储 监控 算法
钱包交易所开发稳定版丨钱包交易所系统开发项目方案/案例详细/成熟技术/源码说明
  随着互联网的迅速发展,人们开始探索更加高效、安全和去中心化的应用。在这一背景下,区块链技术的出现为构建下一代去中心化应用程序(dapp)提供了新的思路和解决方案。