去中心化交易所开发丨去中心化交易所系统开发(功能及逻辑)丨去中心化交易所系统源码部署

简介:   Web3.0的主要特征是开放、隐私和去中心化。其开放体现在Web2.0所谓的生态内、生态间界限将被打破,应用之间具有高度的组合性和复合性;Web3.0内部基于不同基础设施的应用之间可以被“跨链”协议解决互联互通问题。

  Web3.0的主要特征是开放、隐私和去中心化。其开放体现在Web2.0所谓的生态内、生态间界限将被打破,应用之间具有高度的组合性和复合性;Web3.0内部基于不同基础设施的应用之间可以被“跨链”协议解决互联互通问题。

  Web 3.0:移动互联网后下一阶段的互联网生态,主要通过区块链等技术手段,实现中心化的网络形态,模拟真实世界的感觉,实现虚拟、实现打破现实边界的互联网——区块链:是分布式节点存储数据的中心化数据结构,节点是提供计算力的计算机,是计算机或服务器,具有服务器端和客户端两种性质。

  springboot使用web3进行代币交换(uniswap):

  import java.math.BigDecimal;

  import java.math.BigInteger;

  import java.util.ArrayList;

  import java.util.List;

  import org.slf4j.Logger;

  import org.slf4j.LoggerFactory;

  import org.springframework.beans.factory.annotation.Autowired;

  import org.springframework.stereotype.Service;

  import org.web3j.abi.FunctionEncoder;

  import org.web3j.abi.TypeReference;

  import org.web3j.abi.datatypes.Address;

  import org.web3j.abi.datatypes.Function;

  import org.web3j.abi.datatypes.StaticArray;

  import org.web3j.abi.datatypes.Type;

  import org.web3j.abi.datatypes.generated.Uint256;

  import org.web3j.crypto.Credentials;

  import org.web3j.crypto.RawTransaction;

  import org.web3j.crypto.TransactionEncoder;

  import org.web3j.protocol.Web3j;

  import org.web3j.protocol.core.methods.response.EthGasPrice;

  import org.web3j.protocol.core.methods.response.EthGetTransactionCount;

  import org.web3j.protocol.core.methods.response.EthGetTransactionReceipt;

  import org.web3j.protocol.core.methods.response.EthSendTransaction;

  import org.web3j.protocol.http.HttpService;

  import org.web3j.utils.Convert;

  import org.web3j.utils.Numeric;

  import io.renren.common.utils.R;

  import net.sf.json.JSONObject;

  Service
  public class Uniswap{

  private static final Logger log=LoggerFactory.getLogger(Uniswap.class);

  Autowired

  private EthGas ethGas;

  Autowired

  private EthAccount ethAccount;

  /**

  *

  *param gasLimit gaslimit

  *param gasPrice gas费用

  *param host链路

  *param privateKey自己的私钥

  *param v要兑换的对应代币的

  *param contractAddress如用USDT兑换BTC,则此值是BTC的合约地址

  *param amountOutMin兑换代币的最小的个数

  *param sendTokenContractAddress如用USDT兑换BTC,则此值是USDT的合约地址

  *param approveAddress approve合约地址,设置此值可以合约内直接确认,无需调钱包插件确认

  *return

  */

  public R sendContract(BigInteger gasLimit,BigInteger gasPrice,String host,String privateKey,BigDecimal v,String contractAddress,BigInteger amountOutMin,

  String sendTokenContractAddress,String approveAddress){

  Web3j web3j=Web3j.build(new HttpService(host));

  try{

  Credentials credentials=Credentials.create(privateKey);

  String fromAddress=credentials.getAddress();

  //获取交易次数

  EthGetTransactionCount ethGetTransactionCount=ethAccount.getTradeCount(web3j,privateKey);

  //错误返回

  if(ethGetTransactionCount.hasError()){

  return R.error(ethGetTransactionCount.getError().getMessage());

  }

  BigInteger nonce=ethGetTransactionCount.getTransactionCount();

  //合约函数参数

  List<Address>addList=new ArrayList<Address>();

  addList.add(new Address(sendTokenContractAddress));

  addList.add(new Address(approveAddress));

  StaticArray<Address>address=new StaticArray<Address>(Address.class,addList){

  };

  //BigInteger amountOutMin=Numeric.toBigInt("0x8d5ff4d17003f1000");

  if(gasPrice.compareTo(BigInteger.valueOf(0))!=1){//没有输入gas时查询当前链路的gas

  EthGasPrice ethGasPrice=ethGas.getGasPrice(web3j);

  if(ethGasPrice.hasError()){

  return R.error(ethGasPrice.getError().getMessage());

  }

  gasPrice=ethGasPrice.getGasPrice();

  }

  //创建inputdata

  String data=createSwapMethod(amountOutMin,address,addList.size(),new Address(fromAddress),

  new Uint256(System.currentTimeMillis()/1000+300));

  //EthEstimateGas ethEstimateGas=ethGas.getEthEstimateGas(web3j,fromAddress,contractAddress,data);

  //if(ethEstimateGas.hasError()){

  //return R.error(ethEstimateGas.getError().getMessage());

  //}

  //BigInteger gasLimit=BigInteger.valueOf(910000);

  BigInteger value=Convert.toWei(String.valueOf(v.toString()),Convert.Unit.ETHER).toBigInteger();

  RawTransaction rawTransaction=RawTransaction.createTransaction(nonce,gasPrice,gasLimit,contractAddress,

  value,data);

  byte[]signedMessage=TransactionEncoder.signMessage(rawTransaction,credentials);

  String hexValue=Numeric.toHexString(signedMessage);

  log.info("hexValue:{}",hexValue);

  //发送交易

  EthSendTransaction ethSendTransaction=web3j.ethSendRawTransaction(hexValue).sendAsync().get();

  if(ethSendTransaction.hasError()){

  return R.error(ethSendTransaction.getError().getMessage());

  }

  log.info("transactionHash:{}",JSONObject.fromObject(ethSendTransaction));

  String transactionHash=ethSendTransaction.getTransactionHash();

  log.info("transactionHash:{}",transactionHash);

  EthGetTransactionReceipt ethGetTransactionReceipt=web3j.ethGetTransactionReceipt(transactionHash)

  .sendAsync().get();

  log.info("EthGetTransactionReceipt:{}",JSONObject.fromObject(ethGetTransactionReceipt));

  if(ethGetTransactionReceipt.hasError()){

  return R.error(ethGetTransactionReceipt.getError().getMessage());

  }

  return R.ok(transactionHash);

  }catch(Exception e){

  //TODO:handle exception

  web3j.shutdown();

  return R.error(e.getMessage());

  }finally{

  web3j.shutdown();

  }

  }

  SuppressWarnings("rawtypes")

  public static String createSwapMethod(BigInteger amountOutMin,StaticArray<Address>addressArray,int size,

  Address to,Uint256 deadline){

  List<Type>parametersList=new ArrayList<Type>();

  parametersList.add(new Uint256(amountOutMin));

  parametersList.add(new Uint256(128));

  parametersList.add(to);

  parametersList.add(deadline);

  parametersList.add(new Uint256(BigInteger.valueOf(size)));

  parametersList.add(addressArray);

  List<TypeReference<?>>outList=new ArrayList<>();

  Function function=new Function("swapExactETHForTokens",parametersList,outList);

  String encodedFunction=FunctionEncoder.encode(function);

  System.out.println(encodedFunction);

  //函数编码不正确,先替换

  return encodedFunction.replace("0x8fd067c2","0x7ff36ab5");

  }

  }

相关文章
|
供应链 安全 物联网
区块链去中心化交易所源码|去中心化交易系统开发
随着区块链技术的发展,应用的扩展,区块链软件开√发也随之应用到物联网、供应链管理等领域,其中包含区块链交Y所系统,区块链去中心化交Y所,依托于区块链技术,具有去中心化、匿名性、信息不可纂改等特点
|
安全 区块链
DAPP去中心化系统开发|DAPP质押模式系统开发(方案需求)
智能合约是一种以代码形式存在的合约,旨在在去中心化网络上执行和实施
|
算法 区块链
去中心化DAPP交易所系统开发方案与指南
去中心化带来的透明交易,不仅仅是简单地向参与者展示交易信息,更是为参与者提供了保障合法权益的机制。
|
存储 安全 BI
智能合约交易平台开发方案部署:实现安全高效的去中心化交易
随着区块链技术的发展和应用,智能合约交易平台作为区块链领域的重要组成部分,为各行业提供了去中心化的交易解决方案。本文将深入探讨智能合约交易平台的开发方案,旨在实现安高效的交易,提升交易的透明度和信任度,推动区块链技术在商业领域的广泛应用。
|
Rust JavaScript 前端开发
|
区块链 数据库 开发者
数字货币去中心化交易所系统开发(详细功能)/案例设计/程序逻辑/成熟技术丨数字货币去中心化交易所开发源码项目
区块链技术,也被称之为分布式账本技术,是一种互联网数据库技术,其特点是去中心化、公开透明,让每个人均可参与数据库记录。区块链技术不是一个单项的技术,而是一个集成了多方面研究成果基础之上的综合性技术系统。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
|
安全 API 区块链
区块链钱包交易所系统开发详细逻辑丨数字货币交易所钱包系统开发(开发案例)及源码部署
  在区块链中,每个块包含了一定数量的交易信息和该块的唯一标识符,同时还包含了前一个块的哈希值。这样的设计保证了区块之间的顺序和完整性,一旦一个块被添加到区块链中,它就不可更改。这使得区块链成为一个安全可信的分布式账本,可用于记录和验证各种类型的交易。
|
安全 区块链
DAPP去中心化交易所系统开发(开发项目)丨DAPP去中心化交易所系统开发(详细案例)/源码功能
  智能合约是区块链DApp的重要组成部分,是实现区块链DApp商业逻辑的基础。因此,设计智能合约应该根据业务需求进行规划,明确合约的功能和业务流程。
|
存储 安全 前端开发
中心化交易平台开发:如何构建一个有效的数字货币交易所系统
随着加密货币市场的飞速增长,许多企业都在寻找有效的解决方案,以使其加密货币交易项目取得成功。而在这里,UI/UX 的作用无疑是巨大的。系统的运行方式完全取决于界面的简洁性、导航的有效性和用户旅程的顺畅性。 对于那些选择构建集中式加密交换系统的人来说,设计尤为重要。人们经常在没有丰富交易经验的情况下使用此类平台,因此应尽可能清晰直观。但是,如何为观众提供既简单又有效的交流方式呢? 这篇文章将解释集中交换,提供一些示例,并揭示如何设计这样一个系统来应对最常见的 UI/UX 挑战。
中心化交易平台开发:如何构建一个有效的数字货币交易所系统
下一篇
无影云桌面