<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[FingerNFT的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/FingerNFT</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; FingerNFT]]></copyright><item><title><![CDATA[Solidity编码规范]]></title><link>https://blog.youkuaiyun.com/FingerNFT/article/details/127364770</link><guid>https://blog.youkuaiyun.com/FingerNFT/article/details/127364770</guid><author>FingerNFT</author><pubDate>Mon, 17 Oct 2022 15:36:10 +0800</pubDate><description><![CDATA[1、命名规范
避免使用
小写的L，大写的I，大写的O 应该避免在命名中单独出现，因为很容易产生混淆。
合约、库、事件、枚举及结构体命名——大驼峰
合约、库、事件及结构体命名应该使用单词首字母大写的方式。
比如：SimpleToken， SmartBank， CertificateHashRepository，Player。]]></description><category></category></item><item><title><![CDATA[什么是可升级合约]]></title><link>https://blog.youkuaiyun.com/FingerNFT/article/details/127320368</link><guid>https://blog.youkuaiyun.com/FingerNFT/article/details/127320368</guid><author>FingerNFT</author><pubDate>Fri, 14 Oct 2022 15:01:20 +0800</pubDate><description><![CDATA[但是，什么是可升级的智能合约？但也带来了一系列的问题，并且如果已部署的合约发现漏洞，也是无法修复的。~_DATA：逻辑合约初始化方法调用数据，这里为0x8129fc1c(Params.sol initialize方法code)（只调用initialize方法，initialize方法没有入参，如果有参数也是支持的）部署后的合约地址：0x2CC6F64C688B0f9585B2fF4134420A5B74faD836， initialize方法对应的code为0x8129fc1c（部署代理合约的时候会用到）]]></description><category></category></item><item><title><![CDATA[创建一个DAPP的全流程]]></title><link>https://blog.youkuaiyun.com/FingerNFT/article/details/126228701</link><guid>https://blog.youkuaiyun.com/FingerNFT/article/details/126228701</guid><author>FingerNFT</author><pubDate>Mon, 08 Aug 2022 15:46:17 +0800</pubDate><description><![CDATA[在truffle box中，已经提供了pet-shop的网站部分的代码，我们只需要编写合约及交互部分。在Ganache中，左侧有个钥匙符号，点击它，弹出账户私钥（PRIVATE KEY）信息，复制私钥。这样一个DAPP就部署完成了，想要了解更多的区块链知识或是有什么相关的问题和想法，可以来我的交流社区。项目介绍：Pete有一个宠物店，有16只宠物，他想开发一个去中心化应用，让大家来领养宠物。测试领养功能，点击Adopt，确认上链请求，领养完成，显示Success。...]]></description><category></category></item><item><title><![CDATA[智能合约安全——随机数]]></title><link>https://blog.youkuaiyun.com/FingerNFT/article/details/126178694</link><guid>https://blog.youkuaiyun.com/FingerNFT/article/details/126178694</guid><author>FingerNFT</author><pubDate>Fri, 05 Aug 2022 15:31:41 +0800</pubDate><description><![CDATA[当然这种方法也会有一些安全风险，例如依赖第三方给出的随机数种子的话同样会存在第三方作弊或者受贿的情形，即使是自己搭建的随机数服务也可能因为故障等原因无法使用，项目方也有可能操控随机数对 DApp 的运行和用户造成重大的损失。目前来说常见的随机数获取有两种：使用区块变量生成随机数，使用预言机来生成随机数。接下来我们来看合约代码，这个合约是一个猜数字赢以太的游戏，我们可以看到，部署者使用上个区块的区块哈希和区块时间作为随机数种子生成随机数，我们只需要模拟他的随机数生成方法就可以得到奖励。...]]></description><category></category></item><item><title><![CDATA[智能合约安全——delegatecall (2)]]></title><link>https://blog.youkuaiyun.com/FingerNFT/article/details/126142493</link><guid>https://blog.youkuaiyun.com/FingerNFT/article/details/126142493</guid><author>FingerNFT</author><pubDate>Wed, 03 Aug 2022 16:08:46 +0800</pubDate><description><![CDATA[可以看到 Lib.doSomething() 函数将合约中存储位置为 slot0 的参数改为传入的值，这样当 HackMe 合约使用 delegatecall 调用 Lib.doSomething() 函数时也将改变自己在 slot0 位置存储的变量的值，也就是将 lib 参数（这里存储的是 Lib 合约的地址）改为我们传入的 Attack 合约的地址。此时之前在 HackMe.lib 参数中存储的 Lib 合约的地址就被修改成我们传入的 Attack 合约的地址了；社区，一起交流学习~...]]></description><category></category></item><item><title><![CDATA[智能合约安全——delegatecall (1)]]></title><link>https://blog.youkuaiyun.com/FingerNFT/article/details/126118509</link><guid>https://blog.youkuaiyun.com/FingerNFT/article/details/126118509</guid><author>FingerNFT</author><pubDate>Tue, 02 Aug 2022 11:11:19 +0800</pubDate><description><![CDATA[我们可以看到有两个合约，Lib合约中只有一个pwn函数用来修改合约的owner，在HackMe合约中存在fallback函数，fallback函数的内容是使用delegatecall去调用Lib合约中的函数。3.HackMe.fallback()使用deldegatecall调用Lib合约中的函数，函数名取的是msg.data也就是"pwn()"，而Lib合约中恰好有名为pwn的函数，于是便在HackMe合约中运行了pwn函数；1的值，即地址c的值。...]]></description><category></category></item><item><title><![CDATA[智能合约安全——私有数据访问]]></title><link>https://blog.youkuaiyun.com/FingerNFT/article/details/126068846</link><guid>https://blog.youkuaiyun.com/FingerNFT/article/details/126068846</guid><author>FingerNFT</author><pubDate>Sat, 30 Jul 2022 10:33:10 +0800</pubDate><description><![CDATA[3）存储变长数组（长度随元素的数量而改变）比较特殊，在遇到变长数组时，会先启用一个新的插槽slotA用来存储数组的长度，其数据存储在另外的编号为slotV的插槽中。合约中修饰变量的关键字仅限制其调用范围，这也就间接证明了合约中的数据均是公开的，可任意读取的，将敏感数据记录在合约中是不安全的。由上面的合约代码我们可以看到，Vault合约将用户的用户名和密码这样的敏感数据记录在了合约中，大家可以看到，合约中的私有数据也是可以读取的，所以一定不要将任何敏感数据存放在合约中哦。...]]></description><category></category></item><item><title><![CDATA[智能合约安全——溢出漏洞]]></title><link>https://blog.youkuaiyun.com/FingerNFT/article/details/126031117</link><guid>https://blog.youkuaiyun.com/FingerNFT/article/details/126031117</guid><author>FingerNFT</author><pubDate>Thu, 28 Jul 2022 11:25:52 +0800</pubDate><description><![CDATA[如果一个合约有溢出漏洞的话会导致计算的实际结果和预期的结果产生非常大的差异，这样轻则会影响合约的正常逻辑，重则会导致合约中的资金丢失。所以这个参数可以认为在攻击者的角度是不可用的。1.deposit函数存在两个运算操作，第一个是影响用户存入的余额balances的，这里传入的参数是可控的所以这里会有溢出的风险，另一个是影响用户的锁定时间lockTime的，但是这里的运算逻辑是每次调用deposit存入代币时会给lockTime增加一周，由于这里的参数不可控所以这个运算不会存在溢出风险。...]]></description><category></category></item><item><title><![CDATA[NFT市场可二开开源系统]]></title><link>https://blog.youkuaiyun.com/FingerNFT/article/details/121518187</link><guid>https://blog.youkuaiyun.com/FingerNFT/article/details/121518187</guid><author>FingerNFT</author><pubDate>Wed, 24 Nov 2021 16:14:15 +0800</pubDate><description><![CDATA[时至今日，伴随着虚拟货币比特币等流行，越来越多的人把目光投向区块链，去中心化将是未来发展的趋势，区块链不仅作用于虚拟货币市场，企业、政府等项目也纷纷使用区块链技术推进项目开展。

那么作为虚拟货币的底层技术区块链技术是否有开源的必要呢？我们知道，区块链首先要解决的是去中心化的问题，要做到点对点的信任，如果区块链技术不做到开源，很可能你相信的只是这个区块链公司而不是真正意义上的技术，只有区块链技术开源，让更多人看到源码，才是信任的开始。

基于区块链技术，一个新的市场被大家发现，那就是NFT市场，随着国家对虚]]></description><category></category></item><item><title><![CDATA[NFT市场以及如何打造一个NFT市场]]></title><link>https://blog.youkuaiyun.com/FingerNFT/article/details/121513147</link><guid>https://blog.youkuaiyun.com/FingerNFT/article/details/121513147</guid><author>FingerNFT</author><pubDate>Wed, 24 Nov 2021 13:15:01 +0800</pubDate><description><![CDATA[NFT是Non-Fungible Tokens的缩写，意思是不可互换的代币，它是相对于可互换的代币而言的。不可互换的代币也称为非同质代币。

NFT是一种可被买卖的“独一无二”的数字资产，说到“独一无二”就是指他的典型特征之一：唯一性，数字资产也说明NFT是一种无形的存在。

目前NFT经过几年的发展，形成了游戏道具、通证化电子门票、收藏品、加密艺术品等主要场景下标记数字使用权。

通俗化的举例，比如我现在画了一幅画，使用NFT进行标识，他就可以在互联网世界进行自由流转，可以被大家欣赏，也可以被进行买卖，期]]></description><category></category></item></channel></rss>