【Solana】SOL区块链破解生成代币
1.79K subscribers
202 photos
1 video
2 files
3 links
【Solana】SOL区块链破解生成代币
Download Telegram
编写Solana智能合约代码

开发原生程序

😍 用cargo创建一个crate:原生程序只是一些crate,因此首先使用 cargo init<crate_name>--lib 创建一个新crate 。

😍 将 solana-program 添加到依赖项:在crate的根目录中,运行 cargo add solana-program 。这将把链上程序SDK添加为依赖项。

😍 设置所需的Cargo选项:打开 Cargo.toml ,把 crate-type = ["cdylib", "lib"] 添加到lib部分。

😍 定义入口函数:Solana需要知道该从哪里开始执行程序,从这里开始的函数称为入口(entrypoint)。

😍 导出入口函数:使用solana_program::entrypoint宏指令来告诉运行时入口函数是哪个,例如:solana_program::entrypoint!(entrypoint)

😍 编写业务逻辑:原始指令数据将会传递到入口。然后,开发人员需要做的是解码这些数据并采取适当的行为。编码格式不是由网络指定的,所以它是任意的。但是,建议使用Borsh序列化/反序列化程序,可以从solana_program::borsh*模块导出实用程序来使用它。

😍 编写和运行测试:定义常规的Rust单元测试,和/或使用solana-program-test进行集成测试。

😍 构建程序:前面提到的CLI工具套件附带了cargo-build-bpf,它可以构建适合部署的二进制工作文件。直接运行它或调用cargo build-bpf通过Cargo运行它。如果需要的话它将自动下载工具链,并构建二进制工作文件,将其放入target/deploy/目录。

编写测试:Anchor 使用 TypeScript 通过 Solana TypeScript SDK 定义集成测试。

构建程序:使用anchor build。

运行测试:使用anchor test。

SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
测试Solana智能合约

测试智能合约的功能和效率是 Solana 开发的关键。 Solana 提供了一系列测试工具和环境,旨在确保您的代码正常工作并集成到 Solana 生态系统中。


单元测试:Rust 中集成的单元测试框架是第一道防线,它允许您单独检查各个代码段,并在开发机器上进行本地测试。使用 Anchor 时,编写单元测试明显更具挑战性,因为框架本身仅使用 Solana TypeScript 客户端 SDK 提供的“外部”集成测试。

集成测试:集成测试可以评估您的智能合约与其他 Solana 网络组件的交互。集成测试有两种主要方法:solana-program-test,它是一个 Rust 的crate,为集成测试提供模拟的 Solana 网络环境;solana-test-validator,它运行本地 Solana 节点,用于在本地节点测试智能合约。后者明显慢得多,使用起来也更麻烦,但它的行为几乎就像一个真实的网络。 Anchor 使用后者来运行测试,但使用 Bankrun 测试框架可能是测试 Anchor 程序的另一个可行选择。


SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
部署Solana智能合约

测试 Solana 智能合约代码后,下一步是部署到 Solana 网络。操作方法如下:

😍 部署程序:您的智能合约在网络上的唯一标识符是程序 ID。要创建程序 ID,请通过在终端中执行以下命令来使用 Solana 命令行界面 (CLI):solana program deploy <path_to_your_compiled_program>。此操作会编译您的智能合约并将其上传到网络,为其分配一个程序 ID 以供引用和交互。如果您想要程序的虚地址(vanity address),您可以提前生成它(例如使用 solana-keygen)并用 --keypair 参数将其提供给 solana program deploy。默认情况下,您将获得一个随机地址。使用Anchor时,可以使用anchor deploy。您可以通过将其密钥放入 ./target/deploy/<program_name>-keypair.json 来提供虚地址。


😍 验证部署:通过检查网络上的程序 ID 来确认您的智能合约已正确部署。您可以使用 Solana Explorer、Solscan.io、另一个公共索引器或 Solana CLI 命令 solana program show <program_id> 检索有关合约的详细信息,包括其大小和 SOL 余额。此步骤可确保您的智能合约已激活并准备好在网络上使用。


如果您在开发过程中遇到困难,或者需要对 Solana 智能合约进行第三方审核,我们可以随时为您提供帮助。
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Solana智能合约具体实现

😍 创建合约时创建权限表:在executive执行创建时,额外创建权限表即可。

😍 提供权限表的读写操作接口:提供/sys/contractAuth系统合约,专门作为访问权限表的系统合约。solidity使用0x1005地址。

😍 系统合约ContractAuth接口

function getAdmin(address contractAddr) public view returns (address) {}

function resetAdmin(address contractAddr, address admin)
public returns (int256);

function setMethodAuthType(
address contractAddr, bytes4 func, uint8 authType)
public returns (int256);

function openMethodAuth(
address contractAddr, bytes4 func, address account)
public returns (int256);

function closeMethodAuth(
address contractAddr, bytes4 func, address account)
public returns (int256);

function checkMethodAuth(
address contractAddr, bytes4 func, address account)
public view returns (bool);

function deployType() public view returns (uint256);

function setDeployAuthType(uint8 _type) public returns (int256);

function openDeployAuth(address account) public returns (int256);

function closeDeployAuth(address account) public returns (int256);

function hasDeployAuth(address account) public view returns (bool);


SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
Please open Telegram to view this post
VIEW IN TELEGRAM
👀 合约软链接资源生命周期

😍 用户可以通过 link 接口创建合约软链接资源,将会在/apps 目录下创建对应的资源,例如:调用link时参数为 Hello v1 0x123456,合约名为Hello,v1为版本号,0x123456为真实合约地址,将会创建 /apps/Hello/v1 合约软链接资源。

😍 同样的,用户可以通过 link 接口覆盖写入合约软链接资源,例如:再次调用link时参数为 Hello v1 0x666888,将会覆盖写入/apps/Hello/v1 合约软链接资源。

😍 用户可以通过控制台的 call 命令直接调用合约软链接,实现对真实合约的调用。

😍 用户可以通过调用 readlink 接口获取合约软链接的真实合约地址,在调用合约时也可以读取合约地址和ABI进一步调用。
Please open Telegram to view this post
VIEW IN TELEGRAM
BFS主要接口实现

部署合约


在部署合约时,将会预先确定该级目录父目录均已经存在且可以写入信息,然后启动虚拟机执行部署创建合约操作;虚拟机执行成功后, 创建合约的表,并将虚拟机执行后的合约代码段、ABI、状态数据等写入合约表,最后在父目录的数据表中记录新部署的合约的元信息。整体流程如下图所示,流程图以创建“/apps/Hello/World”为例。


SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
智能合约漏洞分析

本章把以太坊智能合约漏洞发生的原因分为是哪个层面:Solidity层面、EVM层面和区块链层面。如下表所示,所列出的漏洞都有对应真实案例,这些漏洞造成了巨额的资金损失。


SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
【一、Solidity层面】

这一层发生的漏洞主要是因为代码编写的逻辑问题或是使用了不当的Solidity内置方法,简而言之,它们基本都和Solidity的语言特性有关。例如

😍 重入攻击:是由于外部函数对合约的send()或者call.value()方法进行了递归调用造成的漏洞,解决办法是改为使用transfer(),该方法只能被调用一次。需要注意的是合约中应避免使用send()或者call.value()方法,以免受到重入攻击;

😍 访问控制攻击:是由于合约未设置函数的访问权限而造成的漏洞,解决办法是为函数加一个onlyOwner修饰符,限制函数访问;

😍 整数溢出:是由于在这个语言中,要计算的数如果超过了EVM能处理的数字范围(0~2256-1)就会重新从0或2256-1开始计数,解决办法是智能合约中只要是数学计算都使用safe-Math库;

😍 未检查返回值:是由于合约使用了send()或call.value()函数,却没有检查函数是否执行成功就进行下一步操作导致的漏洞,解决办法是校验成功后再下一步;

😍 拒绝服务:是由于攻击者恶意回退函数执行失败,使得原合约无法进行下一步操作而造成的漏洞,解决办法是把主动退款改为让用户申请退款,这样一个用户退款失败不影响合约继续执行。 这里需注意的是智能合约中能写成pull形式(用户主动发起调用)的代码不要写成push形式(合约主动执行操作)的代码;


SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
Please open Telegram to view this post
VIEW IN TELEGRAM
【二、EVM层面】

这一层发生的漏洞主要是由于EVM的限制导致的, 例如
😍 变量使用类型限制:是因为var关键字声明变量时默认变量的类型是uint8,如果使用了for(var i=0;i<x;i++)这样的用法且恰好x>255,那将导致无限循环直到gas耗尽。 所以在编写合约时应显式标注变量类型,避免使用var;
😍 Gas限制:是由于在合约被调用时,每次修改合约状态都需要使用gas,如果一个函数涉及特别复杂的操作,需要消耗的gas达到了交易或区块的gas限制,那么对这个函数的调用将会在消耗很多gas的同时调用失败, 并回滚合约状态;
😍 调用堆栈深度限制:是由于EVM最大允许栈深度为1024,如果调用者嵌套调用时,深度到1024,将会调用失败。

攻击者可以利用EVM的这三个限制使得合约调用失败,以此阻止合约下一步操作。避免这类漏洞的方法就是在编写合约中的函数时,避免让合约的下一步操作依赖这一步的状态。

SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
Please open Telegram to view this post
VIEW IN TELEGRAM
【三、区块链层面】

私有变量依赖
在Solidity中,私有变量虽然无法被自身合约以外的外围直接读取,但只要某一条交易中使用了这个私有变量,它就化私为公了。因为在以太坊中交易信息是全网公开的, 且每个交易的数据字段对应了规定的内容,只要对数据字段进行分析就可以知道私有变量的值。
被操控值依赖
智能合约中可被人为操控的值有随机数的种子、交易顺序、合约余额等

😍 随机数种子。在某类游戏合约中,通常需要依赖一个随机数下注来判断输赢。而计算机世界中不存在一个绝对随机数,只能通过seed去生成一个相对随机数,但如果这个seed是可预测的,那随机数也就不随机了。 智能合约新手习惯使用未来的区块头属性作为随机数种子,如区块Hash、区块高度、时间戳、难度值等,然而这些区块头属性的值都是可被矿工人为控制的,所以不能依赖这些属性作为随机数种子。 解决办法是使用链外可信第三方服务来获取随机数,如Oraclize;或者一些专门的随机数生成合约,如开源项目RANDAO。

😍 交易顺序,也是可被矿工操作的。

😍 合约中的Ether余额,这个值也特别容易诱导开发人员将其当做确定值来作为判断条件。尤其是Solidity新手可能会认为合约只能通过带有payable修饰符的函数接受Ether, 事实上,除此之外还有两种方式可将Ether强制发给合约,一种是通过selfdestruct自毁合约,可在删除合约地址中所有字节码的同时将合约存储的Ether强制发送到指定地址, 若这个地址是一个合约地址,那么这些Ether将不会调用这个合约的任何方法而是直接存入合约中。另一种更神奇的方式是让这个合约在出生前就拥有一笔财富,因为合约地址都是确定的, 可根据这个合约的创建人地址以及交易的nonce值计算得到,这样就可在创建这个合约之前就给它转入一笔Ether,当合约创建后就拥有非零Ether余额。

合约逻辑应该避免依赖于合约余额的确切值,因为可能飞来横币。如果非要使用合约余额作为判断条件,也应根据实时查询到的合约当前余额来判断。


SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
Please open Telegram to view this post
VIEW IN TELEGRAM
智能合约检测现状
目前全球做智能合约安全审计的公司并不多,开发出形式化验证工具的更是少之又少,国内外做合约形式化验证的平台有俄罗斯的SmartDec、瑞士的Securify、 美国的Quantstamp和中国的Vaas,其中VaaS检测平台比较易用。除此之外,非基于形式化验证的工具有Solidity开发文档中推荐的SmartCheck、Oyente、Manticore、Mythril、Porosity等, 这些工具只能检测特定的部分漏洞。再者就是依靠专业智能合约审计人员人工检测,检测结果依赖审计人员水平而定。


SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
智能合约检测方法

👀大致有以下几种方法:
😍 把已知的可能存在漏洞的代码写在工具的源代码中,当待检测的合约代码有类似漏洞代码或逻辑时,便将其标记出来,这一类检测工具有SmarkCheck、Securify等。

😍 对合约代码进行反编译,然后通过对字节码的分析,找出漏洞,这一类检测工具有Oyente、Manticore、Mythril、Porosity等。

😍 通过生成一个DOT图,显示合约代码的功能控制流程,实现对代码逻辑的检测,这列工具主要有Solgraph。

还有一类检测方法与上述工具的检测思路都不一致,它就是形式化验证,这是形式化方法中的一部分。形式化方法就是用数学工具来进行定义、开发和验证一个系统。

SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
Please open Telegram to view this post
VIEW IN TELEGRAM
安全代码编写建议

😍 代码模块化
如果要编写逻辑复杂的合约,尽可能使合约代码模块化,使得一个模块只包含一个特定的功能。模块化不仅方便代码编写者对代码整体逻辑的把我,而且一旦代码发生错误, 也方便测试者定位代码的错误所在。

😍 使用安全代码
如果代码中需要使用的功能,已被安全审计智能合约框架所包含,直接调用已被审计过的代码比自己重写这个功能更安全。例如,在以太坊中发行ERC-20 代币的代码, 在开源框openZeppelin中已有经过大量安全测试的代码模板,使用此代码模板发行代币可避免很多安全风险。

😍 防范代码漏洞
针对上一节中描述的合约漏洞,需要在编码时加以防范,此处不再赘述。


SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
Please open Telegram to view this post
VIEW IN TELEGRAM
合约测试

智能合约编程和传统编程在资金安全方面有很多不同,首先是智能合约本身可以存储大量资金,一旦遭到攻击会直接导致资金损失,很容易被黑客当做攻击目标; 其次,智能合约代码是公开的,黑客可以不受限制地研究代码漏洞,只要代码存在漏洞,不被发现的概率很小,所以编写智能合约时需要尽可能详尽地考虑安全问题。 另外,由于智能合约在区块链上部署成功后就不能修改,即使发现了安全漏洞,也无法像传统程序那样打补丁或升级,所以合约编写者需要做到的是,一方面必须在编写代码过程中就把异常终止和升级逻辑写进智能合约, 另一方面必须减少编写不安全代码的概率。

SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
产生背景

【一、应对其他链带来的威胁】
作为区块链的创世鼻祖,多数交易所、挖矿公司都是以比特币起家,这使得比特币在整个区块链界长期占据着主导地位。但是,随着技术发展,市面上又出现了几种流行的主流区块链,如以太坊、比特股等。 特别是以太坊,其支持智能合约的特性对比特币产生极大的冲击,而基于比特币的项目至今仍然很少。而且,由于比特币共识机制的特性,对其进行重大改造升级, 基本是一件不可能的事情,提出侧链技术有助于在保持比特币主链不进行大的变动下,使得对其进行升级改造变得可能。


SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
【二、提升区块链可扩展性】
可扩展性一直是区块链网络的一个硬伤,提升区块链的交易吞吐率是现阶段一个非常重要的研究方向。不管是比特币后来升级的隔离见证技术或因区块扩容分叉出的BCH, 对交易吞吐率的提升都是十分有限的。以太坊目前(2022)交易的TPS也只有20笔左右,其现阶段的主要任务是升级到PoS共识、分片,最终目标就是提高全网吞吐率。 目前比较知名的Hyperledger Fabric等,在控制节点数量、缩短共识时间的前提下,TPS也只能达到1000笔。这与支付宝在"双十一"顶峰所达到的每秒几十万交易量相差实在太大。

如果实施跨链技术,就有望在多链上并发交易,那么吞吐率也会成倍增长。比如,将比特币的一部分交易放在其侧链上去执行,减轻主链的压力,这样便可以无形中提升比特币系统的可扩展性。


SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
实现方案
目前,主流的跨链技术方案的实现方式主要有三大类,分别是公证人机制、侧链/中继链和哈希锁定

【一、公证人机制】
也称为见证人机制,本质上是一种引入中介的方式。具体而言,假设区块链A和B本身并不能直接进行互操作的,那么它们可以引入一个共同信任的第三方作为中介, 由这个共同信任的中介进行跨链消息的验证和转发。这种实现方式的优点是能够灵活支持各种不同结构的区块链,缺点是存在中心化风险。

😍 传统的公证人机制是基于中心化的交易所来实现跨链资产转移,实现起来比较容易,但功能也单一。以比特币和以太币的交换为例,具体流程是用户将自己在比特币区块链上的资产发送给托管方, 后者收到信息后,锁定比特币区块链上的资产,并且激活等价值的以太币区块链资产。这种方案最大的问题是拥有一个中心化的机构。

😍 还有一种升级版的方式,将交易所省纪委一个由公正联盟使用多签名技术来控制的机构,不再是一个单一机构。这样使得想要偷窃已经锁定的数字资产,就需要得到多个机构的签名。 相对于传统交易所来说,安全性有所增加,但锁定数字资产的安全仍然取决于公正联盟的忠诚度。

😍 最后一种是著名的分布式账本技术Ripple。它是采用类似公证人机制来解决全球金融机构之间的资产交换,并且不收取任何手续费,其交易可以在几秒内完成。读者可以谷歌上搜索关于Ripple共识的资料。


SOL区块链破解生成代币 破解合约绕过区块链制定新的规则合约代币 #区块链破解 #代币生成 需要做的人可以来联系:@Perlah544
Please open Telegram to view this post
VIEW IN TELEGRAM