合约版&泰山众筹项目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)});

相关文章
|
7月前
|
存储 安全 区块链
DAPP众筹互助模式系统开发|技术方案
智能合约的主要目的之一是在多方之间去信任化地自动达成金融协议
|
存储 算法 区块链
DAPP公排互助质押项目系统开发指南与方案
去中心化。区块链技术不依赖额外的第三方管理机构或硬件设施,没有中央控制。除了自成一体的区块链本身,各个节点通过分布式的计费和存储实现信息的自校验、传输和管理
|
区块链 数据安全/隐私保护
DAPP众筹互助系统开发|DAPP公排合约系统开发指南
去中心化区块链作为分布式技术的一种创新形式,提供了一种去中心化、透明和可信的数据处理方式
|
供应链 安全 区块链
DAPP矩阵公排合约互助系统开发模式|DAPP互助系统开发指南
智能合约的工作原理基于区块链的去中心化特性
|
数据管理 区块链
DAPP智能合约/泰山众筹/互助公排模式系统开发合约源代码详情
def tfs(contract, token_name, user_address, amount): # 检查用户是否有足够的代币 balance = contract.functions.balanceOf(token_name, user_address).call()
|
存储 前端开发 测试技术
众筹互助智能合约系统开发(开发案例)丨dapp智能合约众筹互助丨公排拆分丨系统开发详细规则/成熟技术/方案设计/源码说明
 智能合约互助系统开发是指创建并实现基于智能合约技术的互助系统。智能合约是一种在区块链上执行的自动化计算代码,它可以在事先设定的条件满足时执行相应的操作,无需依赖人工干预。智能合约互助系统旨在通过智能合约技术来优化和自动化互助服务的提供和管理。
|
存储 区块链 文件存储
DAPP众筹互助公排系统开发(详情功能)DAPP互助模式开发
区块就是很多交易数据的集合,它被标记上时间戳和之前一个区块的独特标记
|
存储 区块链
去中心化泰山众筹互助商城dapp系统开发源代码
去中心化区块链泰山众筹互助商城dapp系统开发源代码
|
Rust JavaScript 前端开发
DAPP泰山众筹系统搭建开发智能合约技术
链上所有的应用程序(dApp)也都是由智能合约驱动的,不论是借贷协议、去中心化交易所(DEX)、预言机或NFT市场。这些协议都是由一个或多个智能合约组成的,而合约里面都会写好各式功能,让协议能正常被用户使用。
|
JavaScript 前端开发 测试技术
区块链泰山众筹互助商城dapp系统开发合约定制(代币分红模式)技术分析
区块链泰山众筹互助商城dapp系统开发合约定制(代币分红模式)技术分析
下一篇
DataWorks