使用 Anchor 与 SPL Token Program 交互指南
使用Anchor与SPL Token Program交互指南Anchor 是用来开发 Solana 智能合约的高层开发框架,它基于 Rust,简化了 Solana 原生开发的繁琐流程。SPL 是 Solana Program Library 的缩写,它是Solana官方维护的一套标准智能合约程序集合,用来为 Solana 生态提供各种 基础功能模块,类似于以太坊里的 ERC标准合约。
创建Token Mint首先要了解什么是Mint账户,简单来说,Mint 账户就是某个代币的“发行登记中心”,负责记录这个代币的总发行量、精度、小数位,以及谁有权限铸造(mint)或销毁(burn)它,所以它的结构就非常的清晰了,如下:
pub struct Mint { /// 用于铸造新token的可选权限。mint权限只能在mint创建期间提供。 /// 如果没有mint权限,则mint具有固定的供应量,并且无法铸造更多的token。 pub mint_authority: COption<Pubkey>, /// token的总供应量。 ...
code4rena-Kinetiq
高 缓冲区达到最大限额,取消资金大于合约的资金质押协议允许用户质押代币并赚取奖励。当用户希望提取他们的代币时,他们会调用 queueWithdrawal() 来启动提取流程。管理者可以通过调用 cancelWithdrawal() 来取消待处理的提取请求,这会将 KHYPE 代币返还给用户。为了正确完成取消流程,管理者必须调用 redelegateWithdrawnHYPE() 来更新协议状态,包括缓冲区和其他操作。然而,存在一个限制:一旦达到缓冲区阈值,代币会从 EVM 层移动到 L1 spot 余额,但redelegateWithdrawnHYPE()要求 address(this).balance >= cancelledWithdrawalAmount。由于这些转移的资产在合约层面不再可访问,但仍然计入已取消的提取金额中,因此该条件在数学上变得不可能满足。尽管有概念验证(POC),但让我举个例子:质押管理器合约的目标缓冲区为 3 HYPE。Alice、Bob、Sage 和 Tony 各质押了 1 HYPE,这自动达到了目标缓冲区,剩余部分将进入 L1 spot 余额。从 ...
EIP712
EIP712当然!EIP-712 是以太坊的一项标准,它定义了一个结构化的消息签名方案,以便能够安全、标准化地对复杂数据进行签名和验证。简单来说,它是一个用于签名复杂数据结构(如结构化对象、数组、嵌套对象等)并保证其不可篡改的标准。
🌟 EIP-712 概述EIP-712 规范提出了对结构化数据进行签名的方法,解决了以下问题:
避免重放攻击:如果没有结构化数据的签名,可能存在相同的签名被滥用的风险。
易于解析和验证:签名的对象可以被预先约定和验证,避免直接签名原始字节流。
提升用户体验:用户可以明确知道自己签署的内容,减少误签和恶意签名的风险。
🔍 EIP-712 的核心概念EIP-712 通过将数据分为两部分来创建安全的签名:
Domain Separator(域分隔符):标识签名数据的来源。通过引入这个“域”概念,可以区分不同的签名场景,防止重放攻击。例如,一个签名用于交易,另一个用于账户管理,它们的域分隔符是不同的,彼此之间互不干扰。
类型哈希:对数据结构的类型进行哈希,确保签名的数据结构不被篡改。
数据结构:EIP-712 签名的数据本身是结构化的,数据包括了 t ...
跨链合约时代:Axelar、Wormhole、Hyperlane 谁能称霸多链通信?
跨链合约时代:Axelar、Wormhole、Hyperlane 谁能称霸多链通信?随着区块链技术的快速发展,跨链通信已经成为了区块链生态系统中的重要组成部分。跨链协议允许不同的区块链之间进行信息传递和资产互操作,从而打破了各个链之间的孤立局面。Axelar、Wormhole 和 Hyperlane 作为三大跨链协议的代表,它们在多链通信的实现上各具特色。那么,谁能称霸跨链合约时代,成为未来的多链通信标准呢?
一、跨链协议的背景随着区块链的多样化发展,去中心化金融(DeFi)、NFT、游戏和其他应用程序已经不再局限于单一链上运行。不同区块链之间的数据和资产流通需求日益增加。然而,不同链之间缺乏统一的通信协议,导致了跨链操作的复杂性和不兼容性。因此,跨链协议应运而生,它们旨在提供链与链之间的高效、安全和可扩展的通信机制。
跨链协议不仅仅是为了解决资产的流动问题,更重要的是推动去中心化应用(DApp)和去中心化自治组织(DAO)等创新模式的实现。
二、Axelar:跨链的互联网Axelar 提供了一个简单、安全且去中心化的跨链解决方案,其目标是成为一个“区块链互联网”。Axelar 使用统 ...
codehawk-Liquidity Management
高 执行逻辑错误的参数漏洞代码:
/** * @notice 此函数是提款流程的结束。 * @dev 应更新所有必要的全局状态变量 * * @param withdrawn 从头寸中提取的代币数量 * @param positionClosed 当完全通过提款关闭头寸时为真,否则为假 */ function _handleReturn(uint256 withdrawn, bool positionClosed, bool refundFee) internal { (uint256 depositId) = flowData; uint256 shares = depositInfo[depositId].shares; uint256 amount; if (positionClosed) { amount = collateralToken.balanceOf(address(this)) * shares / totalShares; } else { uint ...
cantina-size Credit
cantina-size Credit使用owner()函数,该合约已经设置了owner为零漏洞代码
function reinitialize() external onlyOwner reinitializer(1_7_0) { // grant `AccessControlUpgradeable` roles to the `Ownable2StepUpgradeable` owner _grantRole(DEFAULT_ADMIN_ROLE, owner()); _grantRole(PAUSER_ROLE, owner()); _grantRole(KEEPER_ROLE, owner()); _grantRole(BORROW_RATE_UPDATER_ROLE, owner()); // transfer `Ownable2StepUpgradeable` ownership to the zero address to keep the state consisten ...
sherlock-Yieldoor 审计报告
Yieldoor整数溢出 (高)代码如下:
uint256 index = (observationCardinality + currentIndex - i) % observationCardinality;
这里的observationCardinality和currentIndex在合约中都是uint16的类型,也就是说2^16-1
0-65535,当他们俩个相加的话就会出现整数溢出,导致依赖计算的函数都会无法进行
溢出就会导致整个合约的核心功能无法使用
杠杆base计算错误 (高)代码如下:
base = owedAmount / vp.maxTimesLeverage;
使用了借款金额,来计算base,可能会导致超过初始抵押品的,导致用户被清算。
计算 base 时 未考虑初始抵押品 initCollateralValue,导致 base 可能超出合理范围。这导致用户在 实际抵押品仍然充足的情况下被提前清算。例子如下:假设:
用户存入 1000 USDT 作为抵押
借入 1000 USDT,总仓位变成 2000 USDT
vp.maxTimesLeverage ...
codeHawks-2024-12-Aldo SssTablecoinsss 审计报告
Aldo SssTablecoinsss 审计报告这次抽空在codeHarw上面,做了一次首飞。是关于defi 的。结果使用p语言写的,导致很多人可能就没有去参加,我也提交了3个,虽然只有一个被判为中等,但是这是我第一次被选择成最终报告
这是我正确的报告
语言机的时间设置的太大(中等)(me)(被选为作为报告)M-01. The TIMEOUT is set as a fixed constant of 72 hours, which makes it inflexible in adapting to the market price.SummaryIn this contract, the TIMEOUT is set as a fixed constant (72 hours, or 259200 seconds). This means that if the oracle price data is not updated within 72 hours, the data will be considered outdated, and the contract will ...
sherlock-2024-11-Oku'sNew Order Types 审计报告
一Summary在执行 _getExchangeRate函数的时候,没有检查,tokenIn和tokenOut是不是同种的代币,导致一些无意义的汇率计算出来
Root Cause2024-11-oku-HeYuan-33/oku-custom-order-types/contracts/automatedTrigger/AutomationMaster.sol
Lines 77 to 86 in ee3f781
function _getExchangeRate( IERC20 tokenIn, IERC20 tokenOut ) internal view returns (uint256 exchangeRate) { // Retrieve USD prices from oracles, scaled to 1e8 uint256 priceIn = oracles[tokenIn].currentValue(); uint256 priceOut = oracles[tokenOut]. ...
CTF-ApproveMain
CTF-ApproveMain题目的源代码:
pragma solidity ^0.8.0;// ERC20contract Cert{ mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; address public admin; struct AddressSlot { address value; } // 预挖给msg.sender 100个代币 constructor () { _mint(msg.sender, 100*10**18); } modifier safeCheek(address spender, uint256 amount) { if (uin ...