当前位置: 首页 > news >正文

网站技术解决方案网站建设的经验总结

网站技术解决方案,网站建设的经验总结,电商网站如何优化,石家庄建设网站参考[link](https://blog.csdn.net/weixin_43563956/article/details/127725385 大致流程如下#xff1a; 编写合约 生成abi 解析abi得出指令集 指令通过opcode来映射成操作码集 生成一个operation 以太坊虚拟机的工作流程#xff1a; 由solidity语言编…参考[link](https://blog.csdn.net/weixin_43563956/article/details/127725385 大致流程如下 编写合约 生成abi 解析abi得出指令集 指令通过opcode来映射成操作码集 生成一个operation 以太坊虚拟机的工作流程 由solidity语言编写的智能合约通过编译器编译成bytecode之后发到以太坊上以太坊底层通过evm模块支持合约的执行和调用调用时根据合约获取代码即合约的字节码生成环境后载入到 EVM 执行。 1、操作码opcodes.go 合约编译出来的bytecode中一个OpCode就是上面的一位。opcodes按功能分为9组以第一位十六进制数来分类例如0x1x,0x2x。 opCodeRange对应操作0x0arithmetic ops算数操作0x10comparison ops比较操作0x20crypto加密操作0x30closure state状态闭包0x40block operations区块操作0x50‘storage’ and execution存储和执行操作0x60pushes压栈操作0x80dups克隆操作0x90swaps交换操作0xa0logging ops日志操作0xf0closures闭包 2、合约contract.go NewContract函数构造了新的合约且如果是被合约调用则复用该合约的 jumpdests。 validJumpdest函数用于验证给定的目标地址是否为有效的跳转目标。通过获取目标地址对应的操作码判断是否为JUMPDEST类型。如果不是则返回false表示无效的跳转目标。调用c.isCode(udest)方法来进一步验证目标地址是否为有效的代码位置。如果是有效的代码位置则返回true表示有效的跳转目标否则返回false。 func (c *Contract) validJumpdest(dest *uint256.Int) bool {udest, overflow : dest.Uint64WithOverflow()// PC cannot go beyond len(code) and certainly cant be bigger than 63bits.// Dont bother checking for JUMPDEST in that case.if overflow || udest uint64(len(c.Code)) {return false}// Only JUMPDESTs allowed for destinationsif OpCode(c.Code[udest]) ! JUMPDEST {return false}return c.isCode(udest) }isCode函数判断给定的地址是否为有效的代码段。 3、jump_table.go 这是跳转表。在不同的以太坊版本中会填充不一样的字段。对指令的真正的解释函数是在这个部分里面而不是在解释器当中。 其中frontierInstructionSet 这个对象包含了最基本的指令信息其它是对这个集合的扩充最全的一个是 constantinopleInstructionSet。 operation使用的时候以指令的opcode值为索引。其中包括指令的解释执行函数、要消耗的gas值、栈空间大小和消耗的内存空间大小函数在memory.go中实现。 type operation struct {// execute is the operation functionexecute executionFuncconstantGas uint64dynamicGas gasFunc// minStack tells how many stack items are requiredminStack int// maxStack specifies the max length the stack can have for this operation// to not overflow the stack.maxStack int// memorySize returns the memory size required for the operationmemorySize memorySizeFunc }针对不同的jump-table有不同的函数里面有不同的解释执行函数。 在每一种类型中实现不同的operation对象。 而validate函数用来检查jump_table中的操作是否为空。 func validate(jt JumpTable) JumpTable {for i, op : range jt {if op nil {panic(fmt.Sprintf(op %#x is not set, i))}if op.memorySize ! nil op.dynamicGas nil {panic(fmt.Sprintf(op %v has dynamic memory but not dynamic gas, OpCode(i).String()))}}return jt }4、其它文件 gas.go和gas_table.go 这两个文件是用来计算所消耗的gas值在具体的gas_table.go文件中针对不同的操作有不同的函数来进行不同的计算。例如 contracts,go文件用于存放预编译好的合约 common.go用于存放一些常用的工具方法
http://www.w-s-a.com/news/20301/

相关文章:

  • 如何查询网站建设时间wordpress 框架解析
  • 网站建设年终总结网站建设公司顺义
  • 网页给别人做的 网站后续收费吗获取更多付费流量
  • 金融交易网站建设金融 网站建设
  • 长沙网站建设联系电话怎么做表格
  • 网站怎么做域名实名认证龙华网站 建设信科网络
  • 企业网站规划方案网站是做排行榜
  • 万维网网站个人申请网站
  • 我想做网站怎么做昆山网站建设 全是乱码
  • 单位做网站怎么做圣诞树html网页代码
  • 网页开发与网站开发企业网站托管服务常用指南
  • 一站式服务图片临沂做进销存网站
  • 鸣蝉智能建站标准物质网站建设模板
  • 电商网站建设技术员的工作职责商业网站制作价格
  • 网站html模板免费下载公司的网站建设费用入什么科目
  • 高中生做网站网页网页制作教程零基础学会
  • 做金融网站有哪些要求WordPress站内搜索代码
  • 济南网站怎么做seowordpress注册发邮件
  • 珠海网站设计平台东莞市手机网站建设平台
  • 网站开发文档合同怎么在wordpress导航条下方加入文字广告链接
  • 网站建设需怎么做有网站怎么做企业邮箱
  • 网站制作流程视频教程小程序多少钱一年
  • 暗网是什么网站花都网站建设哪家好
  • 贵州网站开发流程晋江论坛手机版
  • 网站建设丿金手指谷哥14阿里巴巴官网电脑版
  • 网站开发招聘信息匿名ip访问网站受限
  • 网站转app工具网站规划建设与管理维护大作业
  • flash是怎么做网站的.net购物网站开发
  • 烟台网站建设求职简历品质商城网站建设
  • 做百度外链哪些网站权重高点做网站具备的条件