- 博客(29)
- 收藏
- 关注
原创 3.ERC4626
ERC4626是一个vault,在DAI中,使用ETH换取DAI。其流程为先充值ETH到maker vault。Vault以太坊改进提案EIP:ethereum improvemwnt proposal最初提出想法,与最初标准还是有不同,ERC4626是继承ERC20较好的4626代码分别是和。
2024-05-06 14:03:27 573
原创 4.去中心化交易所、恒定乘积自动做市商算法及代码
在中心化交易所中注册账户时,是由交易所生成一个地址,用户可以向地址充币,充到地址之后交易所就会根据用户充币的数量显示在管理界面中。但是充币的地址是掌管在交易所之中的,资产的控制权还是在交易所。添加liquidity之后能够拿到LPtoken作为凭证,称为share,在添加之后所有liquidity的share是T(total supply),之后对liquidity添加了S的流动性。移除流动性(例如手中有x份share,在移除的时候,能拿到多少x和y的币)添加之后x/y=(x+Δx)/(y+Δy)
2024-03-30 22:09:33 1810 3
原创 2.稳定币USDT、USDC、BUSD、Dai、AMPL
充值:例如充值10以太坊,能够生成一笔交易,告诉Vault想要生成多少Dai,抵押以太坊,取回一定数量的Dai。设置DSR为了控制整个DAI的供应量,例如项目方认为市场上流通的DAI太多了,对于一个加密货币项目是希望市场上没有那么多的加密货币流通,这样价格会更容易操控。在用户进行充值的时候需要KYC,显示了其中心化特性,不仅如此,在USDT链上代码中,能够自定义用户将其加入黑名单,同时还能进一步能够将用户持有的token置零。2. 泰达公司根据用户充值的数量,给用户地址发行相应数量的USDT货币。
2024-03-23 21:23:25 964 1
原创 1.区块链金融 DeFi
中心化金融概念:各种银行、投行、投资公司等都被称为中心化金融(CeFi),例如在中心化机构中进行存钱投资。狭义上去中心化金融的概念是被认为在2008年11月1日中本聪发布白皮书开始。金融指的是货币或者财务资产的创造、管理和投资的过程。
2024-03-21 11:07:58 330 1
原创 1 合约环境配置
中使用封装好的合约,在contrasts中新建sol文件保存。前置要求:安装node.js [建议安装18及以上]在test文件夹中新建一个market.js测试代码。合约使用hardhat和remix进行编写运行调试。1.新建合约文件夹 nft-contract。2.在文件夹路径cmd 开始配置环境。在remix-ide中点击。
2024-03-08 14:53:03 425
原创 区块链技术学习笔记(24) 美链
就会导致amount是一个非常小的数值,扣除了很少的代币,这就相当于系统方凭空多发了很多的代币。美链中有一个叫batchTransfer的函数,它的功能是向多个接收者发送代币,然后把这些代币从调用者的帐户上扣除。ERC 20是以太坊上发行代币的一个标准,规范了所有发行代币的合约应该实现的功能和遵循的接口。没有自己的区块链,代币的发行、转账都是通过调用智能合约中的函数来完成的。美链(Beauty Chain)是一个部署在以太坊上的智能合约,有自己的代币BEC。
2024-03-04 14:29:28 301
原创 区块链技术学习笔记(23) 以太坊反思
区块链中不可篡改这个性质也算作双刃剑,一方面增加了合约的公信力,大家都必须根据合约代码规定操作。并且如果恶意节点发行漏洞,发动了安全攻击,很难进行终止交易、冻结账户。硬分叉也不仅仅只是以太坊开发团队决定,硬分叉之所以成功是因为有90%以上的矿工支持追回,尽管如此,少部分人不同意追回资金也坚持没有升级。智能合约并不智能,其本质是一个代码合同。由于区块链的不可篡改性质,智能合约写好之后将无法更改。开源的合约代码更加有公信力。从语言设计上,solidity语言特性中,转账时隐形地调用了fallback函数。
2024-03-01 20:56:29 317
原创 区块链技术学习笔记(22) The DAO
但The DAO只存活了三个月。如果投资存在分歧,少部分人对将要投资的项目不认可,也可以使用拆分的方法,从The DAO中独立出来成立自己的子基金,拆分的时候需要将代币赎回为以太币,并打入子基金中,这样就能够投资认可的项目。由于以太坊同时存在两条链,很容易导致重放攻击(由于新链和旧链上的账户信息、状态树等信息都相同,在新链或者旧链上的交易,放到另一条链上,也能够通过验证),新加了chain ID来区分链。在代码中The DAO是先将钱退回之后,再将账户上的余额清空,黑客利用重放攻击,将近1/3的金额盗走。
2024-02-29 14:48:00 294
原创 区块链技术学习笔记(21) 以太坊智能合约
智能合约是以太坊的精髓,也是比特币和以太坊最大的区别。智能合约是运行在区块链上的一段代码,代码的逻辑定义了合约的内容。智能合约的账户保存了合约当前的运行状态.合约如何调用另一个合约的函数:1.直接调用错误处理:如果调用的合约在执行过程中出现错误,会导致发起调用的合约也会一起回滚2.使用address类型的call()函数错误处理:如果被调用的合约在执行中出现异常,call函数会返回false,发起调用的函数还是能够继续执行。3.代理调用。
2024-02-28 19:04:03 1665
原创 区块链技术学习笔记(19) 以太坊挖矿难度调整算法
比特币在经过2100区块后会调整挖矿难度,目标是维持出块时间在十分钟左右。在以太坊中则是在每个区块都有可能会调整区块难度,调整的方法较为复杂。
2024-02-26 13:15:32 351
原创 区块链技术学习笔记(18) 以太坊挖矿算法
对于基于工作量证明的加密货币来说,挖矿是保证区块链安全的重要手段以太坊通过使用两个一大一小的数据集(16M的、1G的称为DAG)cache和dataset都是要定期增大的,每隔一段时间大小都要增大cache的生成方式是从种子节点运算出数组的第一个元素,并依次取哈希得到后续的元素,通过这样从前向后将整个数组填充伪随机数dataset数据集的生成方式:dataset每一个元素都是从cache中通过伪随机的顺序读取一些元素。
2024-02-25 15:35:50 336
原创 区块链技术学习笔记(17) 以太坊共识机制GHOST
以太坊的出块时间为十几秒,所以对于以太坊来说,临时性的分叉是常态,因为别的区块在十几秒内还没有接收到所发布的新区块,还是沿着原来的区块向下挖。当节点收到新区块时,其可能已经挖出了另一个新区块。在比特币中,只有在最长合法链中的区块奖励才是有效的,其他分叉链上的区块奖励是无效的。在比特币中发布区块会得到两份奖励:静态奖励block reward和动态奖励tx fee在以太坊中也是类似:静态奖励block reward 和动态奖励 gas fee(注:uncle区块不能得到gas fee)
2024-02-24 15:30:07 258
原创 区块链技术学习笔记(16) 以太坊交易树和收据树
发布区块的时候,区块中所包含的交易会组织成一棵交易树(Merkel Tree),同时以太坊增加了一棵收据树,每个交易执行完之后会生成一个收据,记录交易的相关信息。交易树和收据树其中的节点是一一对应的,从结构上讲 交易树和收据树都是MPT,其中key为交易中排的序号(序号由发布区块的节点决定)交易树和收据树都是只把当前发布区块的交易组织起来的,而状态树则需要将系统中所有账户的状态都要包含。多个区块的状态树是共享节点的,每次发布一个新区块的时候,需要新建一个分支,其他的节点都是沿用之前状态树节点。
2024-02-23 13:51:21 472 1
原创 区块链技术学习笔记(15) 以太坊状态树
以太坊采用的是基于账户的模式,系统显式地维护每个账户的余额功能:账户地址到账户状态的映射 address=>state(160bits=20字节=>40个16进制)
2024-02-18 18:09:59 582 1
原创 区块链技术学习笔记(14) 以太坊账户
比特币系统中采用的是基于交易的账本,在这个模式下并不会显式记录每个账户上会存在多少钱,而是根据UTXO推断余额,既计算拥UTXO中有私钥的币总和,隐私保护较好,使用并不太方便(在交易的时候要证明每一个币的来源,并且在一次交易收到的币UTXO,消费的时候必须全部都花出去,不能只花一部分)以太坊中采用的账户模式:转账的时候不需要说明币的来源,能够很好的防御双花攻击,对于重放攻击(收款者不诚实,交易时。
2024-02-12 15:40:36 699
原创 区块链技术学习笔记(13) 以太坊概述
最初也采用了PoW机制,但其出块时间大约为十几秒,远快于比特币,这使得交易处理速度更快,网络吞吐量更高。相较于比特币,设置了对内存更有要求的挖矿难题。这是为了抵抗ASIC(Application-Specific Integrated Circuit)矿机的中心化趋势,让普通的GPU(图形处理单元)矿工也能参与到挖矿中来,从而保持网络的去中心化属性。这意味着矿工需要解决一个复杂的计算问题才能获得出块权,这个机制确保了网络的安全和去中心化,但也导致了较高的能源消耗和较慢的交易确认时间。
2024-02-09 20:13:01 406 1
原创 区块链技术学习笔记(12) 比特币相关思考
全节点将区块存储在k86数据库(例如level DB)中,存储形式为:(key,value),在存储中通过哈希值串联,只要掌握了最后一个区块的哈希值,就能依次查找key的哈希值从而查到区块内容value,再找到value中前一个区块头哈希,最终能找到整个链上的所有区块。在区块的块头会包含前一个区块的哈希指针,指针保存的是本地内存的地址,在本地计算机才有意义,在进行传播的时候,哈希指针是怎样通过网络传播呢?n个人共同持有一个比特币账户,截断私钥,每个人保存1/n部分的私钥,会出现什么样的问题?
2024-02-08 14:54:48 263
原创 区块链技术学习笔记(11) 比特币匿名性
1. 如果x,y不同,那么它们的加密函数值E(x)和E(y)也不相同。零币(zerocoin)系统中存在基础币和零币,通过基础币和零币的来回转换,消除旧地址和新地址的关联性,其原理类似于混币服务。公开E(x)、E(y),通过同态隐藏的性质3算出E(x+y)的值,再对比E(7)的值,如果相同则验证通过,否则验证失败。3. 给定E(x)和E(y)的值,可以很容易地计算出某些关于x,y的加密函数值。-同态加法:通过E(x)和E(y)计算出E(x+y)的值。-同态乘法:通过E(x)和E(y)计算出E(xy)的值。
2024-02-07 16:21:19 728 1
原创 区块链技术学习笔记(10) 问答小结
发布的区块中有coinbase tx其中的铸币奖励是挖矿人的地址,如果偷取nonce,挖矿人的地址改变之后,会导致内容改变,Merkel tree的根哈希值会发生变化,原来的nonce值就不再适用,所以无法偷取别的nonce。OP_RETURN是写在输出脚本的,验证当前交易合法性的时候是不会执行这个语句的,这个语句只有在后面 有人想花点这个钱的时候 才会执行这个交易的输出脚本 ,才会执行OP_RETURN并报错。6. 挖矿的过程是在尝试大量的nonce,那么是否会会有矿工偷取别的矿工的nonce?
2024-02-06 15:26:56 229 1
原创 # 区块链技术学习笔记(9)--比特币分叉
旧节点认可新节点挖出的区块,新节点不认可旧节点挖出的区块,由于升级新节点占据了大部分算力,所以只要旧节点不升级,那么旧节点将无法获得记账权(旧节点挖出来之后,新节点不认可,进行分叉,最长链始终为新节点挖出的区块)。hard fork:未升级协议的节点不支持新协议的特性 (例如 区块大小变大),只要旧节点不更新协议,硬分叉就不会消失。一个比较著名的软分叉是P2SH,支付的时候付给一个赎回脚本的hash。:因为使用不同版本的协议造成的分叉,根据协议内容的不同 又可以分为硬分叉和软分叉。
2024-02-04 11:37:43 252 1
原创 区块链技术学习笔记(8)--比特币脚本
在比特币交易浏览器()上面 随机找一个交易实例.能够观察到 交易有一个输入两个输出,交易输入中交易者转给地址bc1qyajmwnf8nvqgaagphxuz6nwrf6rcya29gnaan5了0.0013BTC,并给自己找零转回了0.00141605 BTCwitnessscriptscript。
2024-02-03 17:01:34 1310 1
原创 区块链技术学习笔记(7)--节点、pow工作量证明
如果有矿池掌握大于50%算力可能会出现:分叉攻击、boycott(封锁账户,所有和这个账户有关的交易不纳入区块,如果纳入区块中就会进行分叉攻击,从而保证区块中没有这个账户的交易)其它节点收到候选区块后进行验证,发现确实合法,就承认这个区块是一个新的合法区块,并添加到自己维护的本地区块链结构上。一旦节点找到了满足条件的 nonce 串,这个区块在格式上就“合法”了,成为候选区块,节点将其在网络中广播出去。这个计算 nonce 串的过程,即俗称的“挖矿”,nonce 串的查找需要花费一定的计算力。
2024-01-31 14:47:29 238
原创 区块链技术学习笔记(6)--比特币挖矿难度调整
在比特币系统中每隔2016区块(大约14天)调整target,通过实际时间调整挖矿难度,但是实际最多调整不能超过4倍的幅度。在以太坊中,使用ghost,对于orphan block 会给予奖励(uncle reward)而不是将其丢掉。为了避免因为算力增长太快导致的出块时间过短而导致的大量分叉而构成的安全威胁,需要调整挖矿难度。挖矿是不断随机尝试nonce值,是区块结构的哈希满足一定条件(比如小于某个目标阈值)调整target就是调整挖矿难度,挖矿难度与目标阈值成反比。
2024-01-29 16:57:56 334
原创 区块链技术学习笔记(5)--BTC网络
(我称之为交易池)集合中的交易都是等待被写入区块链的,集合中的交易如果被写入到区块链中,节点接收到新区快之后就要将这个交易从集合中删除(如果新区块包含的交易使得交易集合中某个交易变得不合法,那么需要将变得不合法的交易删除)。加入网络需要知道至少一个种子节点,通过与种子节点交互能够知道种子节点知道的其他节点,节点之间通过TCP通信,有利于穿透防火墙,离开时不需要其他操作直接退出。比特币网络中,一个交易记录不一定能传给每一个节点并且每个节点收到交易的顺序也不一定相同。
2023-07-16 16:44:36 301 1
原创 区块链技术学习笔记(4)--BTC实现
2.故意制造并行的双花,如果M转给A的交易使得外部产生不可逆的效果(例如购物)接着再进行交易回滚(并将此交易扩展为最长链),那么M就能从中不当获利。UTXO(Unspent Transaction Output)包含产生交易的哈希值,以及其处于第几个交易值。每个区块记录这交易信息(转账、铸币),系统不记录各账户余额,需要通过交易记录推算账户余额。1.多等几个(确认)区块,大约六个确认区块就会认为该交易不可篡改(1h)如何防范:如果该交易节点后还接着几个区块,这样回滚的难度就会很大。1.将其他账户的币转走。
2023-07-06 12:10:05 202 1
原创 区块链技术学习笔记(3)--BTC协议
也就是通过查找转账方之前的交易(以前汇款给本次转账方交易中输出部分的收款方哈希值)哈希值,来对比本次交易的转账方是否为这个币的持有者,这样就能够解决伪造公钥验证的问题。(取哈希是将块头所有部分都取哈希)在转账交易中,输入部分说明币的来源以及转账方的公钥(需要来对比币的来源的公钥),输出部分给出收款方的哈希值。如果接收方伪造一个公钥,并用私钥签名,来冒充币的持有者,该交易被验证通过,这就会将别人账户的钱偷走。FLP:在一个异步的系统中,网络传输时延没有上限,即使只有一个成员的结果有问题,也不可能取得共识。
2023-06-15 18:18:23 132 1
原创 区块链技术学习笔记(2)-数据结构
如果轻节点需要证明Merkle tree中某个数据节点记录的一笔交易被写入区块链中,需要将向上所有父节点中的另一个哈希值(黄色),通过请求到的哈希值与本地哈希值结合,依次从底自上计算该父节点哈希值(绿色),算出根哈希值比较验证。时间复杂度Ω(log(n))这个区块头中,有根哈希值,这个区块所包含的所有交易组成的Merkle tree,都包含在区块头中,交易的具体内容都在块身。区块链与普通的链表的区别:哈希指针代替了普通指针,每个区块都包含了指向前一个区块的哈希指针(最后一个区块的哈希保存在系统里)
2023-06-13 17:08:55 276 1
原创 区块链技术学习笔记(1)--BTC-密码学原理
在比特币中:公钥(视为账户地址)、私钥(视为账户密码) 在进行交易的时候,转帐方需要用自己的私钥进行签名,其他人收到之后用转帐方的公钥进行验证签名。1.由于哈希碰撞,很难通过某个函数、方法直接找到能够满足H(x)=H(y)的x、y值,该性质能够有效检测出数据是否被篡改。:信息的发送者产生的别人无法伪造的一段数据,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。非对称加密:会生成公私钥对,加密用公钥,解密用私钥(用接收方的公私钥)解决了对称加密密钥分发不方便的问题。Solidity文档。
2023-06-12 16:29:43 270 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人