sol

区块链100讲:深入了解以太坊虚拟机的汇编代码基础

五迷三道 提交于 2020-02-28 15:57:04
Solidity提供了很多高级语言的抽象概念,但是这些特性让人很难明白在运行程序的时候到底发生了什么。我阅读了Solidity的文档,但依旧存在着几个基本的问题没有弄明白。 string, bytes32, byte[], bytes之间的区别是什么? 该在什么地方使用哪个类型? 将 string 转换成bytes时会怎么样?可以转换成byte[]吗? 它们的存储成本是多少? EVM是如何存储映射( mappings)的? 为什么不能删除一个映射? 可以有映射的映射吗?(可以,但是怎样映射?) 为什么存在存储映射,但是却没有内存映射? 编译的合约在EVM看来是什么样子的? 合约是如何创建的? 到底什么是构造器? 什么是 fallback 函数? 我觉得学习在以太坊虚拟机(EVM)上运行的类似Solidity 高级语言是一种很好的投资,有几个原因: Solidity不是最后一种语言。更好的EVM语言正在到来。(拜托?) EVM是一个数据库引擎。要理解智能合约是如何以任意EVM语言来工作的,就必须要明白数据是如何被组织的,被存储的,以及如何被操作的。 知道如何成为贡献者。以太坊的工具链还处于早期,理解EVM可以帮助你实现一个超棒的工具给自己和其他人使用。 智力的挑战。EVM可以让你有个很好的理由在密码学、数据结构、编程语言设计的交集之间进行翱翔。 在这个系列的文章中

go的http默认开启tcp keepalive为15秒

為{幸葍}努か 提交于 2020-02-28 07:11:36
问题 http server: package main import ( "log" "net/http" ) func main() { // 启动HTTP服务 addr := "127.0.0.1:8080" // 添加agent的websocket处理 http.HandleFunc("/agent", agentHandler) err := http.ListenAndServe(addr, nil) log.Fatal(err) } func agentHandler(w http.ResponseWriter, r *http.Request) { } http client用telnet模拟(不涉及http消息的收发,只是连接) telnet 127.0.0.1 8080 用tcpdump和strace发现server端开启了15秒的tcp keepalive,但是看代码只有默认为30秒的设置,很奇怪: $ strace ./s 2>&1 | grep setsockopt setsockopt(3, SOL_SOCKET, SO_BROADCAST, [1], 4) = 0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0 // 上面是客户端连接前输出的,下面是客户端连接后输出的 setsockopt(4,

集体智慧编程-第五章优化

喜夏-厌秋 提交于 2020-02-24 23:27:58
组团旅游 import time import random import math people=[('seymour','BOS'), ('FRANNY','DAL'), ('ZOOEY','CAK'), ('WALT','MIA'), ('buddy','ORD'), ('LES','OMA')] destination='LGA' 航班数据schedule.txt 起点,终点,起飞时间,达到时间,价格 加载数据的代码optimization.py flights={} for line in file('schedule.txt'): origin,dest,depart,arrive,price=line.strip().split(',') #key:(origin,dest) value:(depart,arrive,price) flights.setdefault((origin,dest),[]) flights[(origin,dest)].append((depart,arrive,int(price))) def getminutes(t): x=time.strptime(t,'%H:%M') return x[3]*60+x[4] #x[3]为小时数;x[4]为分钟数 描述题解 r=[1,4,3,2,7,3,6,3,2,4,5,3] def

Commando War

时光总嘲笑我的痴心妄想 提交于 2020-02-08 14:23:13
突击战 蓝书P2,UVA11729,一道贪心题。 书上用了vector容器,我直接用结构体数组,我为每个士兵新定义了一个变量t,表明该士兵从接受任务到完成任务在“我”的眼里花费的时间,并定义了一个变量free,用来表示之前某个士兵完成任务需要的时间的剩余值的最大值。答案就是所有士兵t的总和。 AC代码如下: #include<bits/stdc++.h> using namespace std; struct soldier{ int b, j, t; }; struct cmp{ bool operator() (const soldier & s1, const soldier & s2) const { return s1.j > s2.j; } }; int main() { soldier sol[1005]; int n, kase = 0; while(~scanf("%d", &n) && n) { for (int i = 0; i < n; ++i) scanf("%d%d", &sol[i].b, &sol[i].j); sort(sol, sol + n, cmp()); int free = sol[0].j; int ans = sol[0].b + sol[0].j; for (int i = 1; i < n; ++i) { if(free >=

自适应辛普森法

≯℡__Kan透↙ 提交于 2020-01-22 22:12:01
自适应辛普森法通过 \(Simpson\) 公式,用二次函数来拟合,实现时用二分递归来自动控制区间分割的大小,既保证精度,又保证速度 \(Simpson\) 公式推导 \[\int_a^bf(x)dx\] \[\approx\int_a^bAx^2+Bx+C\] \[=\frac{A}{3}(b^3-a^3)+\frac{B}{2}(b^2-a^2)+C(b-a)\] \[=\frac{(b-a)}{6}(2Ab^2+2Aab+2Aa^2+3Bb+3Ba+6C)\] \[=\frac{(b-a)}{6}(Aa^2+Ba+C+Ab^2+Bb+C+4A(\frac{a+b}{2})^2+4B(\frac{a+b}{2})+4C)\] \[=\frac{(b-a)}{6}(f(a)+f(b)+4f(\frac{a+b}{2}))\] 求 \(\displaystyle{\int_l^r\frac{cx+d}{ax+b}\mathrm{d}x}\) \(code:\) double f(double x) { return (c*x+d)/(a*x+b); } double simpson(double l,double r) { double mid=(l+r)/2; return (r-l)*(f(l)+f(r)+4*f(mid))/6; } double sol(double l

Operating system storage management solution

偶尔善良 提交于 2020-01-18 23:35:01
Single continuous storage allocation This method is suitable for single-user, single-task operating systems. Fixed storage allocation This method is suitable for multitasking operating systems. Dynamic storage space allocation When tasks are loaded into memory, they are allocated on demand based on the amount of memory required by the task. Relocatable partition allocation In this storage method, a memory arrangement function is added to the dynamic storage space allocation. 来源: CSDN 作者: QDU Harrison 链接: https://blog.csdn.net/weixin_44033021/article/details/104033828

Linux下的socket编程实践(五)设置套接字I/O超时的方案

▼魔方 西西 提交于 2020-01-07 05:10:47
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> (一)使用alarm 函数设置超时 #include <unistd.h> unsigned int alarm(unsigned int seconds); 它的主要功能是设置信号传送闹钟。信号SIGALRM在经过seconds指定的秒数后传送给目前的进程,如果在定时未完成的时间内再次调用了alarm函数,则后一次定时器设置将覆盖前面的设置,当seconds设置为0时,定时器将被取消。它返回上次定时器剩余时间,如果是第一次设置则返回0。 void sigHandlerForSigAlrm(int signo) { return ; } signal(SIGALRM, sigHandlerForSigAlrm); alarm(5); int ret = read(sockfd, buf, sizeof(buf)); if (ret == -1 && errno == EINTR) { // 阻塞并且达到了5s,超时,设置返回错误码 errno = ETIMEDOUT; } else if (ret >= 0) { // 正常返回(没有超时), 则将闹钟关闭 alarm(0); } 如果read一直处于阻塞状态被SIGALRM信号中断而返回,则表示超时,否则未超时已读取到数据,取消闹钟。但这种方法不常用

ZROI 19.07.28 组合计数/lb

有些话、适合烂在心里 提交于 2020-01-02 04:54:44
T1 题意: \(n\) 个变量, \(0 \leq x_i \leq c_i\) ,求 \(\sum x_i = A\) 方案数。 \(n \leq 32\) 。 Sol: \(n \leq 10\) 的时候容斥很水, 然而生成函数掉线了 。 \(n \leq 32\) 的时候,dls:“显然Meet in Middle。” 然后我又掉线了 全世界就我不会生成函数 T2 题意:求 \(0\) 到 \(2n-1\) 的排列 \(p\) 的个数,使得对于任意的 \(i\) , \(n^2 \leq i^2+p_i^2 \leq 4n^2\) 。 \(1\leq n \leq 250\) 。 Sol: 显然可以转换为 \(l_i \leq p_i \leq r_i\) 的形式。 考虑只有 \(r_i\) 限制的时候,可以按照 \(r_i\) 排序,然后乘法原理。 直接容斥 \(l_i\) 并不可做,但是题目有一些性质: \(l_i,r_i\) 都是递减的,且 \(\{ r_0, …,r_{n-1}\}\) 最大, \(\{ l_0,…,l_{n-1}\}\) 和 \(\{ r_n, …,r_{2n-1}\}\) 混杂。 转化一下,变成了如下序列:前半部分 \(a, b\) 混合,后半部分只有 \(c\) ,且 \(a, c\) 之间两两配对,每对只能选一个,每个 \(b\) 必选

如何在.NET应用中访问以太坊智能合约【Nethereum】

时光总嘲笑我的痴心妄想 提交于 2019-12-27 13:34:22
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Nethereum基本上是目前唯一可用的.NET平台下的web3.js移植包。在这个教程中,我们将首先编写并部署一个简单的智能合约,然后创建一个简单的.NET应用,并使用Nethereum来访问以太坊上的智能合约。Nethereum是通过以太坊节点旳标准RPC接口访问智能合约,因此使用Nethereum可以对接所有的以太坊节点实现,例如geth或parity。 如果你希望快速掌握Netherem的开发,可以访问汇智网的互动教程 C#以太坊开发详解 ,技术问题可以直接咨询课程助教。 智能合约开发与部署 首先安装开发用以太坊节点软件Ganache: ~$ npm install -g ganache-cli 然后安装以太坊开发框架Truffle: ~$ npm install -g truffle 现在创建一个项目目录,进入该目录,并执行 truffle init 进行初始化: ~$ mkdir demo && cd hubwiz ~/hubwiz$ truffle init truffle会创建一些新的文件夹:contract、test、migration等。在contract文件夹中,创建一个新的合约文件Vote.sol: ~/hubwiz/contracts$ touch Vote.sol

Qt开发经验小技巧51-60

≯℡__Kan透↙ 提交于 2019-12-17 21:06:53
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在某些http post数据的时候,如果采用的是&字符串连接的数据发送,中文解析乱码的话,需要将中文进行URL转码。 QString content = "测试中文"; QString note = content.toUtf8().toPercentEncoding(); Qt默认不支持大资源文件,比如添加了字体文件,需要pro文件开启。 CONFIG += resources_big Qt中继承QWidget之后,样式表不起作用,解决办法有三个。强烈推荐方法一。 方法一:设置属性 this->setAttribute(Qt::WA_StyledBackground, true); 方法二:改成继承QFrame,因为QFrame自带paintEvent函数已做了实现,在使用样式表时会进行解析和绘制。 方法三:重新实现QWidget的paintEvent函数时,使用QStylePainter绘制。 void myclass::paintEvent(QPaintEvent *) { QStyleOption o; o.initFrom(this); QPainter p(this); style()->drawPrimitive(QStyle::PE_Widget, &o, &p, this); }