- 博客(1210)
- 资源 (35)
- 收藏
- 关注
原创 什么是GMP?
GMP 是一个免费的任意精度算术库,对有符号整数、有理数和浮点数进行运算。 除了运行 GMP 的机器中的可用内存所暗示的精度外,对精度没有实际限制。 GMP 具有丰富的功能集,并且功能具有规则的接口。
2023-03-19 14:14:11 328
原创 MPC 101:安全多方计算与多方签名
安全多方计算(Secure Multi-Party Computation)的研究主要是针对在无可信第三方的情况下,如何安全地计算一个约定函数的问题。安全多方计算是电子投票、门限签名以及网上拍卖等诸多应用得以实践、落地的密码学基础。安全多方计算通常缩写为SMPC或者MPC。关于安全多方计算的安全性:一个安全多方计算协议,如果对于拥有无限计算能力攻击者而言是安全的,则称作是信息论安全的或无条件安全的;如果对于拥有多项式计算能力的攻击者是安全的,则称为是密码学安全的或条件安全的。
2023-03-19 14:01:43 378
原创 Shamir Secret Sharing Scheme
Shamir Secret Sharing Scheme (SSSS) 可以轻松创建(t, n) 方案,也能够引入新的份额并进行私钥刷新。第一方知道f(1),第二方知道f(2),……当各方想要生成签名时,他们中的任何t+1 人都可以提供他们的份额来重建多项式,从而重建私钥,产生签名。例子:更新f(x) = 2x + 2 生成f(1)=4, f(2)=6, f(3)=8 分发给各方。对于上面的示例,取f(3) = 5、f(4) = 6,依此类推。第一方获得f(1) = 3,第二方获得f(2) = 4。
2023-03-19 13:55:30 426
原创 极简ECDSA
讲ECDSA的文章很多、很长,但通常也是晦涩难懂,本篇志于很简单的语言让读者彻底掌握ECDSA原理并能讲给别人听。私钥和公钥ECDSA 定义了点的特殊操作,并提供了强大的trapdoor function。对于点G(生成元)和随机整数x,我们可以得到点P,其中P = x*G。trapdoor function 特性使得从x 得到P 很容易,但通过知道P 得到x 却非常困难。在实作中,x 将是私钥,点P(x 坐标)将是公钥。签名。
2023-03-19 13:38:35 398
原创 门限签名(Threshold Signatures Scheme, TSS)
阈值签名方案 (TSS) 是一种用于分布式密钥生成和签名的加密原语。在区块链客户端中使用 TSS 是一种新范例,可以提供许多好处,尤其是在安全性方面。从广义上讲,TSS 可以影响密钥管理系统(例如crypto wallets)的设计,并引领 DeFi 用例的原生支持。话虽如此,TSS仍然是一项新技术,因此也应该考虑其风险和局限性。在本文中,我们将介绍什么是 TSS,它为区块链空间带来的潜在优势是什么,它如何在区块链客户端中实现,它与 Shamir 秘密共享和 Multisig 的比较,有哪些不同的方式来实现
2023-03-16 00:01:19 1022 1
转载 聚合签名、门限签名、Multisigs 和多签名
而大家指定的组合人既可以是一个真实的实体(比如受信任的群主),也可以是一个虚拟的实体,其操作以分布式的形式在所有群成员中计算。一个更灵活的解决方案是门限签名,既有基于分布式密钥生成的实现方案(比如 FROST),也有 Stinson and Strobl 提出的提案,还可以将包含了所有可能签名者集合的默克尔树根任意的多签名方案(比如 MuSig2 和 BLS)相结合。在简单的多签名方案中,n 名用户中的每一个都有独立的一对 公/私钥,而一个有效的签名,是 n 个用户的签名的集合。这个签名后面可以用一个。
2023-03-06 23:06:04 2657 1
原创 深度帐户抽象(Account Abstraction)第 4 部分:聚合签名(Aggregate Signatures)
恰好,我们看到并非捆绑包中的所有用户操作都可以将其签名聚合在一起。请记住,钱包被允许使用任何它想要的任意逻辑来验证它所提供的签名,因此同一个包中可能存在各种签名方案。由于我们可能无法聚合来自不同方案的签名,因此我们的包将以操作组结束,每组使用不同的聚合方案或根本没有聚合方案。由于我们需要在链上表示各种聚合方案,每个聚合方案都有自己的逻辑,因此我们将每个聚合方案都由我们称为聚合器的合约表示。聚合器合约将来自多个用户的操作组合成一个具有单个签名的组。// ...
2023-03-06 17:08:31 419
原创 深度账户抽象(Account Abstraction)第 3 部分:Wallet创建
这是很多人没有意识到的一个有趣的花絮:当你部署一个合约时,你提交的代码与最终出现在你的合约中的代码不同。如果用户使用工具来部署他们的合约,那么如果该工具是恶意的或被黑客入侵,它可以提交初始化代码,将后门安装到已部署的合约中,而这种诡计不容易被发现。与 paymasters 一样,如果工厂的部署方法仅访问其正在部署的钱包的关联存储,而不访问工厂自己的关联存储,则工厂无需质押。我们让工厂返回新创建的合约的地址,以便用户可以模拟此方法以在部署之前找出他们的合约将拥有的地址,这也是我们最初的目标之一。
2023-03-06 16:30:40 559 1
原创 深度账户抽象(Account Abstraction)第 2 部分:使用出纳员发起交易
在本系列的第一部分中,我们完全复制了 EOA 的功能,并通过允许用户选择他们自己的自定义验证逻辑进行了改进。但就目前而言,钱包仍然需要支付 gas 费用,这意味着钱包所有者需要找到一种方法来获得一些 ETH,然后才能在链上执行任何操作。如果我们希望钱包所有者以外的人可以代替支付gas怎么办?有一些很好的理由想要这个:如果钱包所有者是区块链新手,那么在执行链上操作之前需要获取 ETH 是一个巨大的绊脚石dapp 可能愿意为其方法支付 gas 费用,这样 gas 费用就不会吓跑潜在用户。
2023-03-06 14:38:02 130
原创 深度帐户抽象(Account Abstraction):第 1 部分
为了使第三个要点起作用,我们实际上需要入口点来保存 gas 支付的 ETH 而不是Wallet Account本身,因为正如我们在上一节中看到的那样,我们无法确定我们是否能够取出 ETH的Wallet Account。虽然这个 EOA 不会像Wallet Account合约那样拥有双重签名保护,但它只需要持有足够的 ETH 来支付运行我Wallet Account的 gas,而更安全的Wallet Account合约可以容纳我所有的贵重物品。执行者想要的是在授予某些保证的上下文中运行这些不受信任的操作。
2023-03-05 23:57:44 231
原创 Go 内存分布
映射、通道和函数类型的内部定义// 映射类型type _map *hashtableImpl // 目前,官方标准编译器是使用// 哈希表来实现映射的。// 通道类型// 函数类型这三个种类的类型的内部结构其实是一个指针类型。或者说,这些类型的值的直接部分在内部是一个指针。这些类型的每个值的直接部分引用着它的具体实现的底层间接部分。切片类型的内部定义elements unsafe.Pointer // 引用着底层的元素lenint// 当前的元素个数capint// 切片的容量}
2023-03-05 00:35:21 461
原创 Awesome nostr
Nostr is a protocol built using self-owned account/identities so that it enables us to create ‘decentralized’ social networks and even other types of solutions.It doesn’t rely on any trusted central server, hence it is resilient; it is based on cryptograph
2023-03-05 00:13:21 280
原创 Go服务Docker Pod不断重启排查和解决
Go语言在 1.9 版本中提供了一种效率较高的并发安全的 sync.Map,sync.Map 和 map 不同,不是以语言原生形态提供,而是在 sync 包。
2023-03-04 21:19:35 985 2
原创 Go struct
一个结构体类型的尺寸为它的所有字段的(类型)尺寸之和加上一些填充字节的数目。两个类型分别为S1和S2的结构体值只有在S1和S2的底层类型相同(忽略掉字段标签)的情况下才能相互转换为对方的类型。不可寻址的字段的值是不可更改的。当一个(源)结构体值被赋值给另外一个(目标)结构体值时,其效果和逐个将源结构体值的各个字段赋值给目标结构体值的各个对应字段的效果是一样的。一般来说,只有可被寻址的值才能被取地址,但是Go中有一个语法糖(语法例外):虽然所有的组合字面量都是不可寻址的,但是它们都可被取地址。
2023-03-04 09:53:50 436
原创 Go 指针
一般说来,一个可寻址的值是指被放置在内存中某固定位置处的一个值(但放置在某固定位置处的一个值并非一定是可寻址的)。通过将double函数的输入参数的类型改为*int,传入的实参&a和它在此函数体内的一个副本x都引用着变量a。如果一个指针类型的基类型为T,则我们可以称此指针类型为一个T指针类型。当然,在此函数体内对传入的指针实参的修改x = nil依旧不能反映到函数外,因为此修改发生在此指针的一个副本上。对于基类型为T的指针类型的一个指针值p,我们可以用*p来表示地址p处的值。*p称为指针p的解引用。
2023-03-04 09:47:02 531 1
原创 Go易错知识集
事实上,Go中的所有的自定义函数(包括声明的函数和匿名函数)都可以被视为闭包。当此预声明的iota出现在一个常量声明中的时候,它的值在第n个常量描述中的值为n(从0开始)。在加载一个代码包的过程中,所有的声明在此包中的init函数将被串行调用并且仅调用执行一次。当一个延迟调用语句被执行时,其中的延迟函数调用不会立即被执行,而是被推入由当前协程维护的一个延迟调用队列(一个后进先出队列)。后,所有在执行此函数调用的过程中已经被推入延迟调用队列的调用将被按照它们被推入的顺序逆序被弹出队列并执行。
2023-03-02 23:34:47 98
转载 GoLang中使用Gorilla Websocket异常处理
在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。如果我们的整个系统按预期工作,则服务器将接收间隔为1秒的数据包,并回复相同的消息。客户端还将具有接收传入的Websocket数据包的功能。在我们的程序中,我们将有一个单独的goroutine处理程序。如果您的Web应用程序使用单独的前端,则通常Websocket客户端将以该语言(Javascript等)实现。但是,出于说明的目的,我们将在Go中同时编写客户端程序和服务器程序。
2023-02-10 18:28:37 916
原创 Centos 7 成功安装PostgreSQL 14过程全记录
PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。PostgreSQL 开发者把它念作。PostgreSQL 的 Slogan 是 "世界上最先进的开源关系型数据库"。
2023-02-08 21:18:57 375
原创 Nostr with NIP-05 Verification Guide
NIP-05 提案是针对用户 Nostr 帐户的验证方法,可以将其视为 Twitter 或 Instagram 上的蓝标。
2023-02-03 00:13:41 350
原创 awesome nostr
“nostr” stands for “Notes and Other Stuff Transmitted by Relays” and is an open protocol for censorship-resistant global networks created by @fiatjaf.nostr- overview and FAQNIPs- the “Nostr Implementation Possibilities” describe the protocol in technical d
2023-02-02 11:49:07 521
原创 MEV原理和PBS架构深度分析
2007年,加拿大皇家银行的交易员胜山发现了一件令他感到困惑的事情,当他在交易终端按下买入键的一瞬间,所有的订单消失了。而在区块链的世界里也发生了一件相似的事情。2022年6月, Scott Bigelow在以太坊主网上面部署了一个加密合约并往里存入了0.035个以太币,只有他一个人知道取出合约内存款的密码。而就在他往合约发送密码信息的一瞬间,合约里的以太币消失了。毫无疑问的是,他们都遇到了抢跑者。
2023-02-01 22:11:24 111
原创 Out of gas的解决方案 Although one or more Error Occurred [out of gas] Contract Execution Completed
Gas Price是指,Gas的单价,即每个Gas值多少Ether。单价越高,矿工们就会越优先打包你的交易,你的交易完成的速度就会越快。调高它就可以解决大部分的OOG问题,并且,调高它并不会提高你的Gas花费,剩余的Gas会重新返还到你的账户当中的。Gas Limit & Usage by Txn实际需要 67,827 (18.18%),此时仅仅使用了Gas Limit的18.18%Gas Limit & Usage by Txn已经达到了设置100%,说明小狐狸设置的Gas Limit不够了。
2023-01-29 15:49:44 503
转载 KZG多项式承诺
今天我想向你们介绍一下Kate,Zaverucha和Goldberg发表的多项式承诺方案1。这篇文章并不涉及复杂的数学及密码学理论知识,仅作为一篇简介。该方案通常被称作卡特(Kate,读作kah-tay)多项式承诺方案。在一个多项式承诺方案中,证明者计算一个多项式的承诺(commitment), 并可以在多项式的任意一个点进行打开(opening):该承诺方案能证明多项式在特定位置的值与指定的数值一致。之所以被称为承诺,是因为当一个承诺值(椭圆曲线上的一个点)发送给某对象(验证者。
2023-01-14 01:06:57 860
原创 区块链常见漏洞万字总结【Web3从业者必备】
在自私挖矿攻击(也称为区块扣留)中,攻击者在自己的区块链分叉中挖掘区块,并且不将它们发布到网络。当攻击者计算出一定数量的区块,再将它们发布到网络中,并尝试替代主链。例如,拥有超过 51% 算力的攻击者可以分叉主链并在他的分叉上开始挖矿。攻击者在获得记账权的时候,利用自己手中的权利实施一些计算或者一些操作让系统的随机数产生偏斜,来增加自己下一次获得记账权的可能。攻击者可以利用这些信息来破坏网络中的节点或路由的可用性。攻击者切断了受害者与外界网络间的所有传入和传出的连接,将受害者与网络中的其他节点隔离开来。
2023-01-10 19:51:41 3512
原创 Merkle trees vs Verkle trees
There are many differences between both types of trees, particularly in providing Merkle proofs and Verkle proofs.
2023-01-09 19:23:03 659
原创 Go 退出协程 goroutine 场景优雅处理
超时返回时的陷阱超时控制在网络编程中是非常常见的,利用 context.WithTimeout 和 time.After 都能够很轻易地实现。time.After 实现超时控制利用 time.After 启动了一个异步的定时器,返回一个 channel,当超过指定的时间后,该 channel 将会接受到信号。启动了子协程执行函数 f,函数执行结束后,将向 channel done 发送结束信号。
2023-01-06 19:06:21 625 2
原创 Go 逃逸分析
堆内存与栈内存Go 程序会在 2 个地方为变量分配内存,一个是全局的堆(heap)空间用来动态分配内存,另一个是每个 goroutine 的栈(stack)空间。与 Java、Python 等语言类似,Go 语言实现垃圾回收(Garbage Collector)机制,因此呢,Go 语言的内存管理是自动的,通常开发者并不需要关心内存分配在栈上,还是堆上。但是从性能的角度出发,在栈上分配内存和在堆上分配内存,性能差异是非常大的。在函数中申请一个对象,如果分配在栈。
2023-01-06 11:52:30 399
原创 Go语言精华总结【万字长文】
在 main() 函数的 goroutine 中执行到 go running 语句时,归属于 running() 函数的 goroutine 被创建,running() 函数开始在自己的 goroutine 中执行。select 机制不是专门为超时而设计的,却能很方便的解决超时问题,因为 select 的特点是只要其中有一个 case 已经完成,程序就会继续往下执行,而不会考虑其他 case 的情况。P:Processor的缩写,一个P代表执行Go代码片段所需要的资源(上下文环境),即用户线程。
2023-01-05 17:46:39 715
原创 Go 互斥锁(sync.Mutex)和读写锁(sync.RWMutex)性能分析
唤醒的 goroutine 不会直接拥有锁,而是会和新请求锁的 goroutine 竞争锁的拥有。这种锁称之为 多读单写锁 (multiple readers, single writer lock),简称读写锁,读写锁分为读锁和写锁,读锁是允许同时执行的,但写锁是互斥的。读写锁的存在是为了解决读多写少时的性能问题,读场景较多时,读写锁可有效地减少锁阻塞的时间。读锁之间不互斥,没有写锁的情况下,读锁是无阻塞的,多个协程可以同时获得读锁。写锁与读锁是互斥的,如果存在读锁,写锁阻塞,如果存在写锁,读锁阻塞。
2023-01-05 11:41:42 1137 2
原创 Go内存对齐的必要性和对性能影响
如何计算结构体占用的空间可以使用 unsafe.Sizeof 计算出一个数据类型实例需要占用的字节数。Args 由 2 个 int 类型的字段构成,在 64位机器上,一个 int 占 8 字节,因此存储一个 Args 实例需要 16 字节。Flag 由一个 int32 和 一个 int16 的字段构成,成员变量占据的字节数为 4+2 = 6,但是 unsafe.Sizeof 返回的结果为 8 字节,多出来的 2 字节是内存对齐的结果。
2023-01-04 19:16:31 439
原创 Go 空结构体 struct{} 使用场景
事实上,对于集合来说,只需要 map 的键,而不需要值。即使是将值设置为 bool 类型,也会多占据 1 个字节,那假设 map 中有一百万条数据,就会浪费 1MB 的空间。一是节省资源,二是空结构体本身就具备很强的语义,即这里不需要任何值,仅作为占位符。在部分场景下,结构体只包含方法,不包含任何的字段。无论是 int 还是 bool 都会浪费额外的内存,因此呢,这种情况下,声明为空结构体是最合适的。因此呢,将 map 作为集合(Set)使用时,可以将值类型定义为空结构体,仅作为占位符使用即可。
2023-01-04 18:12:38 433
原创 Go for 和 range 的性能差别
range 在迭代过程中返回的是迭代值的拷贝,如果每次迭代的元素的内存占用很低,那么 for 和 range 的性能几乎是一样,例如 []int。但是如果迭代的元素内存占用较高,例如一个包含很多属性的 struct 结构体,那么 for 的性能将显著地高于 range,有时候甚至会有上千倍的性能差异。对于这种场景,建议使用 for,如果使用 range,建议只迭代下标,通过下标访问迭代值,这种使用方式和 for 就没有区别了。如果想使用 range 同时迭代下标和值,则需要将切片/数组的元素改为指针,才能不
2023-01-04 15:51:22 481
原创 Go 切片的本质与数组
数组的长度是固定的,长度是数组类型的一部分。如果超过了当前切片的容量,就需要分配新的内存,并将当前切片所有的元素拷贝到新的内存块上。因此为了减少内存的拷贝次数,容量在比较小的时候,一般是以 2 的倍数扩大的,例如 2 4 8 16 …因此很可能出现这么一种情况,原切片由大量的元素构成,但是我们在原切片的基础上切片,虽然只使用了很小一段,但底层数组在内存中仍然占据了大量空间,得不到释放。复杂度为 O(N)。切片操作并不复制切片指向的元素,创建一个新的切片会复用原来切片的底层数组,因此切片操作是非常高效的。
2023-01-04 14:42:55 582
原创 BitKeep Wallet v7.2.9 被盗之APK URL劫持读取深度分析
今日的盗币事件主要为针对7.2.9 APK的黑客劫持,如您使用的是 7.2.9 APK版本,极有可能并不是官方发布的版本,请尽快将**转移至 BitKeep Chrome插件Wallet,或者官方商店下载的app,并新创建地址使用。此外,建议使用新创建的Wallet地址,您通过apk 创建的地址或有可能泄漏给了黑客。尊敬的BitKeep用户您好,经过团队初步排查,疑似部分APK包下载被黑客劫持,安装了被黑客植入代码的包,如您的**出现被盗情况,您下载或者更新的应用或许是被劫持的不明版本(非官方发布版本)。
2022-12-27 15:23:30 1170
转载 Rust语言入门、关键技术与实战经验
这里在单独说下 MIO 提供的另一种线程通讯 channel 机制,虽然我们可以用 Rust 自己的 thread channel 来进行线程通讯,但如果引入 MIO,我更喜欢用 MIO 自己的 channel,主要原因是采用的 lock free queue,性能更好,但有 queue size 限制问题,发送太频繁但接受端没处理过来,就会造成发送失败的问题了。我们都知道,要开发一个高性能的网络服务,通常的选择就是 epoll 这种基于事件触发的网络模型,在 Rust,现阶段成熟的库就是 MIO。
2022-12-26 19:42:35 1547
原创 用零知识证明连接多链宇宙
Bridges是一种通信协议,有助于在区块链之间传输消息、资金或其他数据等信息。虽然有用,但搭建Bridges是一项有风险的业务。区块链历史上一些最昂贵的黑客攻击仅针对Bridges。截至 2022 年,估计过去一年损失的资金中有 69% 是由于对Bridges的袭击,造成的损失高达数十亿美元。在本文中,我们重点关注使用零知识证明 (ZKP) 的桥梁建设的具体实施。虽然一些黑客无法仅仅因为使用 ZKP 就可以预防,但 ZKP 的稳健性将区块链共识协议的安全性扩展到了桥接器。
2022-12-26 01:52:18 2153 2
原创 shard blob transaction是什么
Plasma 其实把资料都是交给 operator,operator 虽然不能随意地把钱拿走,或者说它如果做坏事的话,你可以自己离开 Plasma,这是它的优点,因为它把这些规则都写在了智能合约里面。所以,从很早以前就讲的 Scaling solution 就是我们进到 Layer2,把执行和资料等搬到链下去,而不是在 Layer1,因为 Layer1 太贵太慢,要跟大家去竞争,资源很稀少。,中间其实有几个关键的改进,我习惯把 Sidechain、Plasma 和 Rollup 看作一个演进的路线图。
2022-12-18 15:56:04 1597
VISION FOR A HETEROGENEOUS MULTI-CHAIN FRAMEWORK DRAFT
2023-12-24
Security audit report for imtoken wallet
2023-12-24
Decentraland is a blockchain-based virtual world
2023-12-24
力场的定位是一个以公链共建挖矿为核心的社区平台以及UGC平台
2023-12-24
A Novel Metastable Consensus Protocol Family for Cryptocurrencie
2023-12-24
Measuring Ethereum Network Peers
2023-12-24
Firework Games White Paper
2023-12-24
CS251 Final Exam 2021
2023-12-24
Generic Construction of Ring Signatures with Efficient
2023-12-24
The Gridex Protocol
2023-12-24
Efficient Zero-Knowledge Arguments for Arithmetic Circuits
2023-12-24
KishuInu Whitepaper
2023-12-24
On the Instability of Bitcoin Without the Block Reward
2023-12-24
Shorter Proofs for Privacy-Enhanced Distributed Ledger
2023-12-24
Attacking Threshold Wallets
2023-12-23
This paper provides an architectural overview of the Avalanche
2023-12-23
Avalanche Native Token ($AVAX) Dynamics
2023-12-23
ZKSwap是一个基于 ZK-Rollup 的 Layer2 代币Swap协议
2023-12-23
ZEND White Paper
2023-12-23
KZen Curv Security Audit
2023-12-23
为什么虚拟资产值得投资:元宇宙虚拟地产报告
2023-10-27
元宇宙:未来数字绿洲入口已打开
2023-10-27
Code Assessment of Liquidations 2.0 Smart Contracts
2023-10-27
Scalable and Probabilistic Leaderless BFT Consensus through Meta
2023-10-27
Groth16: a pairing-based (preprocessing) SNARK for arithmetic
2023-10-27
The offer-is-code approach to Decentralised Exchanges
2023-10-27
A Classification Framework for Stablecoin Designs
2023-10-27
EIP-1559 proposal
2023-10-27
拥抱十字路口的挑战:中国金融科技新篇章
2023-02-25
Succinct Arguments、Randomized Algorithms、Universal zk-SNARKs
2023-02-25
Succinct Non-Interactive Zero Knowledge
2023-02-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人