首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何与以太坊智能合约交互?

示例 1 函数:baz(uint32 val, bool check) 返回 bool 函数签名 : baz(uint32,bool) 调用 : baz(69, true) 时,ABI 规范编码数据为:...橙色字节 = 函数选择器,keccak256("baz(uint32,bool)")的前 4 个字节。...有两种可能的情况,你要么有智能合约 JSON ABI,要么没有。 有智能合约 JSON ABI 智能合约 JSON ABI 是一个 JSON 文件,在你构建智能合约时由 solidity 编译器生成。...状态可变性 :函数的可变性:选项是 "view"(只从区块链中读取),"pure"(既不写也不从区块链中读取),"nonpayable"(不能接收以太币)和 "payable"(可接收以太币)。...如果智能合约确实有一个与你的调用相匹配的函数,它将被执行,如果没有,那么交易可能失败,也可能成功,如果智能合约有一个 "fallback()" 函数......重点是,后果可能是意想不到的,而且可能是无法检测的

1.8K40

protocol buffers的编码原理

protocol buffers使用二进制传输格式传递消息,因此相比于xml,json来说要轻便很多。...二进制版本的消息使用field number作为key。 当接收到一个message时,解析器可以忽略无法识别的字段,通过这样的方式,也可以在不影响老功能的前提下添加新的字段。...varint的编码方式,下面介绍一下其他类型的编码 Signed integer int32和int64的实际类型都是varint,当它表示负数的时候,为10个固定字节长度的值,效率比较低。...可以使用sint32和sint64来表示有符号的数值,它采用ZigZag编码,编码对应关系如下,实际就是把负数从0开始做了扩展。...Embedded Messages 假设定义嵌入的message如下: message Test3 { required Test1 c = 3; } 设置Test1.c=150,获得的结果如下,

93030
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    protobuf 序列化和反序列化

    XML的最初产生目标是对互联网文档进行标记,所以它的设计理念中就包含了对于人和机器都具备可读性。 但是,当这种标记文档的设计被用来序列化对象的时候,就显得冗长而复杂。...( JavaScript Object Notation ) JSON起源于弱类型语言Javascript,它的产生来自于一种称之为"关联数组(Associative array)"的概念,其本质是就是采用...JSON格式具备Javascript的先天性支持,所以被广泛应用于Web browser的应用常景中,是Ajax的事实标准协议。...类型 C++类型 备注 double double 64位浮点数 float float 32位浮点数 int32 int32 32位整数 int64 int64 64位整数 uint32 uint32...如果数值总是比总是比228大的话,这个类型会比uint32高效。 fixed64 uint64 总是8个字节。如果数值总是比总是比256大的话,这个类型会比uint64高效。

    58810

    盘点Golang并发那些事儿之二

    这种类型的通道并不强制要求 goroutine 之间必须同时完成发送和接收。通道会阻塞发送和接收动作的条件也会不同。只有在通道中没有要接收的值时,接收动作才会阻塞。...当有协程进入临界区段时,其他协程必须等待,这样就保证了临界区的并发安全。...他们关系是: P管理着一组G挂载在M上运行。当一个G长久阻塞在一个M上时,runtime会新建一个M,阻塞G所在的P会把其他的G 挂载在新建的M上。...当旧的G阻塞完成或者认为其已经死掉时 回收旧的M。 P的个数是通过runtime.GOMAXPROCS设定(最大256),Go1.5版本之后默认为物理线程数。...有了它我们再也不用为了等待goroutine执行完成而添加time.sleep了 Sync.Mutew: 当资源发现竞争时,我们可以使用Sync.Mutew,加互斥锁保证并发安全 Sync.RWMutew

    49230

    强大的序列化工具:Protocol Buffers

    向前兼容:proto没更新,代码更新了,新加的字段proto文件里没有,这种情况Protocol buffers会提供默认值 向后兼容:proto更新了,代码没有更新,会忽略新加的字段,针对删除的字段,...针对必填的枚举值,新增枚举值后,未更新code的项目,无法识别新的枚举值,会丢弃掉,导致无法通过必填校验 基础类型 .proto Type Notes C++ Type Java Type Python...,会自动清除已赋值的字段 不支持map、repeated 额外提供检测某个字段是否被被赋值的方法 向后兼容时需要注意,oneof返回值为None/NOT_SET,无法区分是没有设置值,还是因为兼容性问题导致的...key的文件可能会失败 序列化value为空的map item时,C++, Java, Kotlin, and Python 会使用value的默认值,其他语言不会序列化该map item packages...:Proto3 JSON parser 默认会报错 转json时使用proto里的字段名,默认会转成小驼峰(标注的proto应该是下划线分隔) 针对枚举,可以输出int值,默认是输出枚举值的name字符串

    2.1K20

    Golang 语言 Web 框架 beego v2 之控制器方法和输入输出数据

    ,还可以使用以下方式接收。...: 在 API 的开发中,我们经常会用到 JSON 或 XML 来作为数据交互的格式,在 beego 中获取Request Body中的JSON数据,需要在配置文件中设置:copyrequestbody...SaveToFile(fromfile, tofile string) error 该方法是在 GetFile 的基础上实现了快速保存的功能fromfile 是提交时候的 html 表单中的 name...注意事项: form 表单中增加这个属性 enctype="multipart/form-data" 文件上传之后一般是放在系统的内存里面,如果文件的 size 大于设置的缓存内存大小,那么就放在临时文件中...调用 ServeJSONP 之后,会设置 content-type 为 application/javascript,然后同时把数据进行 JSON 序列化,然后根据请求的 callback 参数设置 jsonp

    1.1K10

    go-并发

    他们关系是: P管理着一组G挂载在M上运行。当一个G长久阻塞在一个M上时,runtime会新建一个M,阻塞G所在的P会把其他的G 挂载在新建的M上。当旧的G阻塞完成或者认为其已经死掉时 回收旧的M。...// 从ch中接收值并赋值给变量x 从ch中接收值,忽略结果,类似于抛弃一个值 关闭: 我们通过调用内置的close函数来关闭通道 close(ch) 关于关闭通道需要注意的事情是...一种方法是启用一个 goroutine 去接收值,例如: func recv(c chan int) { ret := c fmt.Println("接收成功", ret) } func...for range 从通道循环取值 当向通道中发送完数据时,我们可以通过 close 函数来关闭通道。...当通道被关闭时,再往该通道发送值会引发 panic ,从该通道取值的操作会先取完通道中的值,再然后取到的值一直都是对应类型的零值。那如何判断一个通道是否被关闭了呢?

    69920

    Postgresql源码(59)分析事务ID分配、溢出判断方法

    xid取值规律 xid是uint32类型的,GetNewTransactionId函数中xid在ShmemVariableCache->nextXid中取值,但是ShmemVariableCache->...注意ShmemVariableCache->nextXid到正数最大值9223372036854775807后在加一会溢出到负数最小值-9223372036854775808,这时强转到uint32时为...FullTransactionIdAdvance函数 该函数从0开始增加nextXid的值,第一个if保证nextXid可以正常返回0、1、2的值 在后面nextXid增加到4294967296时,会走...在后面nextXid继续增加每次碰到上述情况,都会走while跳过这三个数的倍数。...但是如果id1和id2距离过大,超过2^31后,例如id2从刚才的10继续增长到2147483647,id2领先id1的距离已经超过了2^31: id1 = 4294967290u id2 = 2147483647u

    51410

    蚂蚁区块链第18课 区块链预言机(ORACLE)的定义及在蚂蚁BAAS中的使用

    一般智能合约的执行需要触发条件,当智能合约的触发条件是外部信息时(链外),就必须需要预言机来提供数据服务,通过预言机将现实世界的数据输入到区块链上,因为智能合约不支持对外请求。 具体原因是这样的。...博彩游戏的核心是不可预测、可验证的随机数,从而决定赌注的最终结果,但是在链上是无法生成随机数的或者说在链上的随机数是可以被预测和破解的,这时候就需要预言机从外部给智能合约安全的、不可预测的随机数。...其实,早在 Fomo3D 这个游戏出来之前,以太坊的 Team Leader 就在推特上说过链上是无法生成随机数的。...回调接口 oracleCallbackCurlResponse 回调接口需要业务合约实现,用于接收预言机合约的请求结果回调,如果未能正确实现该合约,则将无法接收请求结果。...--json-path '$.obj' 取子对象 --json-path '$[0]' 从数组取下标 --json-path "$['obj']"

    2.3K00

    以太坊挖矿源码:ethash算法

    Dagger算法注定要替代现存的仅内存计算困难的算法,例如Scrypt(莱特币采用的),它是计算困难同时验证亦困难的算法,当他们的内存计算困难度增加至真正安全的水平,验证的困难度也随之难上加难。...该方法被暂时搁置,是因为它很难看到有什么机制可以用来生成随机程序是足够全面,因此它的专业化收益是较低的。然而,我们并没有看到为什么这个概念无法让它生效的根本原因,所以暂时搁置。...除非客户端真实的提前预缓存了DAG,否则在每个epoch的过渡期间,网络可能会经历一个巨大的区块延迟。 特例:当你从头启动一个结点时,挖矿工作只会在创建了现世DAG以后启动。...([]uint32, mixBytes/4)// mixBytes常量= 128,mix的长度为32,元素为uint32,是32位,对应为4字节大小。...位运算都是将原数据转换为二进制进行运算,或|就是0和1或得1,例如1和2或得3,因为1的二进制表达为01,2的二进制表达为10,01和10或运算以后就是11,等于3。

    4.1K60

    手摸手Go 你的内存对齐了吗?

    不过有些语言倒是会自动帮开发人员解决对齐问题,比如Rust最近还比较火,Microsoft也宣布将逐渐从C/C++转移到Rust构建他的基础结构软件。嗯。。。今年也立个flag 学习下。...来自维基百科 根据维基百科的定义,内存对齐,是代码编译后在内存的布局和使用方式。当一个内存地址a是n字节的倍数(其中n是2的幂)时,内存地址a被称为n字节对齐。...在这种情况下,字节是存储器访问的最小单元,即每个存储器地址指定一个不同的字节。当使用二进制表示时,一个n字节对齐的地址将具有最少log2(n)个最低位有效零。 为什么要内存对齐?...根据测试Go跟C的对齐规则挺一致的,都遵循 数据成员对齐规则:结构体的数据成员,第一个字段放在offset为0的地方,之后的字段的起始地址都必须是默认对齐系数和该类型成员长度中最小的值的倍数 结构体本身也需要对齐...当它作为字段时不需要对齐,但是作为结构体最后一个字段时需要对齐。

    55321

    网站打开缓慢排查思路

    网站打开慢引发的血案 我们经常会遇到一个问题,网站打开速度特别慢,当我们遇到此种问题时该从哪些地方去排查?...如果想要提升服务器的并发能力,需要增加: #表示当keepalive启动的时候,TCP发送keepalive消息的频度,默认2小时,可以设置为20分钟 net.ipv4.tcp_keepalive_time...60;              #指定接收FastCGI应答的超时时间,这个值是已经完成两次握手接收FastCGI应答的超时时间 fastcgi_buffer_size 128k;             ...512k;   #表示在写入缓存文件时使用多大的数据块,默认值是fastcgi_buffers的两倍 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17..."; 10、nginx expires功能 为用户访问网站的内容设定一个过期时间,当用户第一次访问到这些内容时,会把这些内容存储在用户浏览器本地,这样用户第二次及之后继续访问网站,浏览器会检查本地是否有缓存

    3.5K20

    自写go加载器加壳免杀——过国内主流杀软

    ) 思路:还是和我之前的文章一样采用分离式加载免杀 02shellcode加载器 shellcode加载器的编写结构: 1. 定义一个接收函数 2....将你的shellcode放入你的刚才定义的接收函数 3. 解密shellcode 4....(uinpter(0))保护的参数设置为0 unint32(0x40)flNewProtect是内存新的属性类型,将PAGE_EXECUTE_READWRITE设置为(0x40)时该内存页为可读可写可执行并且是最大权限...) 05加 壳 免 杀 免杀还是采用加壳,upx可以使用但需要抹除特征码(对汇编不好的师傅不太友好,而且容易出问题)。...我也尽力通俗的进行了描述, 如有不便请多担待,当然在这里生成的木马还是有点大,请师傅们理解。 08 tips 以上文章为zedxx10师傅所写,感谢zedxx10师傅的技术分享。

    4.7K40

    国外服务器直播网站,海外直播服务器搭建

    目前开源的直播服务程序有:SRS,Nginx-rtmp;如果是做开发的同学应该有所了解,SRS是基于C++写的,Nginx-rtmp模块是Ngxin的第三方C模块。...附录:KCP协议 type segment struct { conv uint32 // 发送端与接收端通信时的匹配数字,发送端发送的数据包中此值与接收端的conv值匹配一致时,接收端才会接受此包...制自己接下来发送数据的大小wnd uint16 // 滑动窗口的大小 // 当Segment做为发送数据时,此wnd为本机滑动窗口大小,用于告诉远端自己窗口剩余多少 // 当Segment做为接收到数据时...,每发送一次会自加一。...fastack uint32 // 用于以数据驱动的快速重传机制; // len uint32 c++版本有数据包的数据长度,go版本无此字段 data []byte} // 协议数据的具体内容 发布者

    8.9K20

    SushiSwap协议分析

    admin_initialized,将其设置为true,之后更新pendingAdmin,当第二次调用setPendingAdmin时,此时的admin_initialized已为true,所以会要求调用者为当前合约地址...uint256 public constant BONUS_MULTIPLIER = 10; //早期sushi奖励加倍倍数 // The migrator contract....然后将其放到xSushi池中,当用户在SushiSwap交易所进行交易时,将收取0.3%的费用,此费用的0.05%以LP令牌的形式添加到SushiBar池中,当奖励合同被调用时(每天最少一次),所有LP...,如果未设置默认是WETH: // F1 - F10: OK // C1 - C24: OK function bridgeFor(address token) public view...可以设定migrator,当migrator的值被确定后migrator.migrate(lpToken)也就可以被随之确定,由于migrate的方法是通过IMigratorChef的接口来进行调用的,

    2.2K41

    一番实验后,有关Batch Size的玄学被打破了

    又有一些理论说,GPU 对 2 的幂次的 batch 可以发挥更好性能,因此设置成 16、32、64、128 … 时,往往要比设置为其他倍数时表现更优。 后者是否是一种玄学?似乎很少有人验证过。...这是因为我们曾经被告知,将批量大小选择为 2 的幂有助于从计算角度提高训练效率。 这有一些有效的理论依据,但它在实践中是如何实现的呢?...如下所示,这些是 k 元素向量对的点积: 每个点积由一个「加」和一个「乘」操作组成,我们有 M×N 个这样的点积。因此,共有 2×M×N×K 次浮点运算(FLOPS)。...如果我们使用带有 Tensor Cores 的 GPU,例如英伟达 V100,当矩阵维度 (M、N 和 K)与 16 字节的倍数对齐(根据 Nvidia 的本指南)后,在 FP16 混合精度训练的情况下...此外,由于 GPU 的内存限制,我无法运行批处理大小为 512 的基准测试,因此在这里降低到 256。 正如我们所看到的,这一次 2 的幂和 8 的倍数批量大小 (256) 并不比 257 快。

    1.4K100

    一番实验后,有关Batch Size的玄学被打破了

    又有一些理论说,GPU 对 2 的幂次的 batch 可以发挥更好性能,因此设置成 16、32、64、128 … 时,往往要比设置为其他倍数时表现更优。 后者是否是一种玄学?似乎很少有人验证过。...这是因为我们曾经被告知,将批量大小选择为 2 的幂有助于从计算角度提高训练效率。 这有一些有效的理论依据,但它在实践中是如何实现的呢?...如下所示,这些是 k 元素向量对的点积: 每个点积由一个「加」和一个「乘」操作组成,我们有 M×N 个这样的点积。因此,共有 2×M×N×K 次浮点运算(FLOPS)。...如果我们使用带有 Tensor Cores 的 GPU,例如英伟达 V100,当矩阵维度 (M、N 和 K)与 16 字节的倍数对齐(根据 Nvidia 的本指南)后,在 FP16 混合精度训练的情况下...此外,由于 GPU 的内存限制,我无法运行批处理大小为 512 的基准测试,因此在这里降低到 256。 正如我们所看到的,这一次 2 的幂和 8 的倍数批量大小 (256) 并不比 257 快。

    49720

    Protobuf语言指南

    你可以指定的最小编号是1,最大是2E29 - 1(536,870,911)。其中19000到19999是给protocol buffers实现保留的字段标号,定义message时不能使用。...未知字段 未知字段是格式良好的协议缓冲区序列化数据,表示解析器无法识别的字段。例如,当旧二进制文件解析具有新字段的新二进制文件发送的数据时,这些新字段将成为旧二进制文件中的未知字段。...映射里的值是无序的,所以不能依赖映射里元素的顺序。 生成.proto的文本格式时,映射按键排序。数字键按数字排序。 从线路解析或合并时,如果有重复的映射键,则使用最后看到的键。...从文本格式解析映射时,如果存在重复键,则解析可能会失败。 如果未给映射的字段指定值,字段被序列化时的行为依语言而定。...int32, fixed32, uint32 number 1,-10,0 JSON value will be a decimal number.

    2.2K30
    领券