合约版&泰山众筹项目DAPP开发技术介绍*智能合约众筹模式开发理念

简介: 合约版&泰山众筹项目DAPP开发技术介绍*智能合约众筹模式开发理念

  MagicNumber

  目标:使用10个操作码输出42

  pragma solidity^0.4.24;

  contract MagicNum{

  address public solver;

  constructor()public{}

  function setSolver(address _solver)public{

  solver=_solver;

  }

  /*

  ____________/\__/\\

  __________/\___////////\_

  ________//\___///______//\_

  ______///\___________//

  ____//__/\______///

  __/\\\\///___

  _/////////////____//_

  ___________/\_____/\\\\_

  ___________///_____///////////////__

  */

  }

  在合约创建的时候,用户或合约将交易发送到以太坊网络,没有参数to,表示这是个合约创建而不是一个交易

  EVM把solidity代码编译为字节码,字节码直接转换成opcodes运行

  字节码包含两部分:initialization code和runtime code,一开始合约创建的时候EVM只执行initialization code,遇到第一个stop或者return的时候合约的构造函数就运行了,此时合约便有了地址

  想要做这道题要构造这两段代码initialization code和runtime code,initialization code是由EVM创建并且存储需要用的runtime code的,所以首先来看runtime code,想要返回42,需要用return(p,s)但是在返回值前先要把值存储到内存中mstore(p,v)

  首先,用mstore(p,v)把42存储到内存中,v是42的十六进制值0x2a,p是内存中的位置,push的字节码是0x60

  0x602a;PUSH1 0x2a v

  0x6080;PUSH1 0x80 p

  0x52;MSTORE

  复制

  然后,用return(p,s)返回42,p是存储的位置,s是存储所占的大小不明白为啥是0x20

  0x6020;PUSH1 0x20 s

  0x6080;PUSH1 0x80 p

  0xf3;RETURN

  复制

  所以整个runtime code是0x602a60805260206080f3

  再来看initialization code,首先initialization code要把runtime code拷贝到内训,然后再返回给EVM

  将代码从一个地方复制到一个地方的方法是codecopy(t,f,s)。t是目标位置,f是当前位置,s是代码大小(单位:字节),之前我们的代码大小为10字节

  ;copy bytecode to memory

  0x600a;PUSH1 0x0a S(runtime code size)

  0x60??;PUSH1 0x??F(current position of runtime opcodes)

  0x6000;PUSH1 0x00 T(destination memory index 0)

  0x39;CODECOPY

  复制

  然后,将内存中的runtime codes返回到EVM

  ;return code from memory to EVM

  0x600a;PUSH1 0x0a S

  0x6000;PUSH1 0x00 P

  0xf3;RETURN

  复制

  initialization codes总共占了0x0c字节,这表示runtime codes从索引0x0c开始,所以??的地方是0x0c

  所以,initialization codes最后的顺序是600a600c600039600a6000f3

  两个拼起来,得到字节码是:

  0x600a600c600039600a6000f3602a60805260206080f3

  var bytecode="0x600a600c600039600a6000f3602a60805260206080f3";

  web3.eth.sendTransaction({from:player,data:bytecode},function(err,res){console.log(res)});

相关文章
|
6月前
|
存储 安全 区块链
DAPP众筹互助模式系统开发|技术方案
智能合约的主要目的之一是在多方之间去信任化地自动达成金融协议
|
区块链
DAPP众筹互助系统开发(成熟技术)|DAPP众筹互助系统开发案例分析
智能合约是一种以代码形式存在的合约constructor()public
|
区块链 数据安全/隐私保护
DAPP众筹互助系统开发|DAPP公排合约系统开发指南
去中心化区块链作为分布式技术的一种创新形式,提供了一种去中心化、透明和可信的数据处理方式
|
数据管理 区块链
DAPP智能合约/泰山众筹/互助公排模式系统开发合约源代码详情
def tfs(contract, token_name, user_address, amount): # 检查用户是否有足够的代币 balance = contract.functions.balanceOf(token_name, user_address).call()
|
存储 前端开发 测试技术
众筹互助智能合约系统开发(开发案例)丨dapp智能合约众筹互助丨公排拆分丨系统开发详细规则/成熟技术/方案设计/源码说明
 智能合约互助系统开发是指创建并实现基于智能合约技术的互助系统。智能合约是一种在区块链上执行的自动化计算代码,它可以在事先设定的条件满足时执行相应的操作,无需依赖人工干预。智能合约互助系统旨在通过智能合约技术来优化和自动化互助服务的提供和管理。
|
存储 区块链 文件存储
DAPP众筹互助公排系统开发(详情功能)DAPP互助模式开发
区块就是很多交易数据的集合,它被标记上时间戳和之前一个区块的独特标记
|
Rust JavaScript 前端开发
DAPP泰山众筹系统搭建开发智能合约技术
链上所有的应用程序(dApp)也都是由智能合约驱动的,不论是借贷协议、去中心化交易所(DEX)、预言机或NFT市场。这些协议都是由一个或多个智能合约组成的,而合约里面都会写好各式功能,让协议能正常被用户使用。
|
存储 区块链
去中心化泰山众筹互助商城dapp系统开发源代码
去中心化区块链泰山众筹互助商城dapp系统开发源代码
|
存储 自然语言处理 分布式数据库
交易所系统开发(成熟技术)丨交易所系统开发(海外版)丨交易所系统开发(多语言)丨交易所源码案例
  建立数据可信流通体系,增强数据的可用、可信、可流通、可追溯水平,是激活数据要素潜能、赋能实体经济的重要途径。区块链技术具有去中心化、共识机制、不可篡改、可以追溯、规则透明等特点。
|
JavaScript 前端开发 测试技术
区块链泰山众筹互助商城dapp系统开发合约定制(代币分红模式)技术分析
区块链泰山众筹互助商城dapp系统开发合约定制(代币分红模式)技术分析