首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

智能合约游戏之殇——God.Game 事件分析

攻击合约withdraw() tx:4. withdraw() 攻击合约调用了God的withdraw(),攻击合约因此获得了红利对应以太币【不重要】 攻击合约transfer() tx:5. transfer...下面是详细的介绍: 攻击者 ==转账==> 攻击合约 合约收到转账时,红利本应为0,却变得很多,账户可用资金变得很多。 攻击合约 withdraw() 把可用的钱提款为eth,token不变。...攻击合约 ==转账==> 攻击者 token原路返回攻击者,token不变,但合约中多出了 eth 。...但攻击者还利用了红利溢出,进而获得了大量的token。根据上面多方面因素,虽然主办方在事件发生后声明自己是受害者。但是根据telegram上记录,主办方在游戏开始之前就再未查看玩家群。...谁也不知道游戏背后的创建者究竟有什么打算,但人皆贪婪,有钱财的地方,必有隐患。

89730
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    solidity语言开发以太坊智能合约中的继承

    所有函数调用都是虚函数,这意味着会是调用派生函数最多的函数,除非明确给出了合约名称。当某一个智能合约从多个合约继承时,只在区块链上创建一个智能合约,并将所有基础合约中的代码复制到创建的智能合约中。...external函数f不能在内部调用(即f()不起作用,但this.f()起作用)。当外部函数接收大量数据时,它们有时会更有效。...public:公共函数是智能合约接口的一部分,可以在内部调用,也可以通过消息调用。对于公共状态变量,会生成自动getter函数(见下文)。...contract will be sent to the owner. */ contract Destructible is Ownable { function Destructible() payable...pragma solidity ^0.4.11; contract BankAccount is Ownable, Destructible { function store() public payable

    96930

    在以太坊上部署一个确定性的合约

    尽管每个合约地址都是确定部署的,但经典方式和我们后面要介绍的方法之间的主要区别是使用不同的创建函数。 传统上,智能合约的地址是使用部署者地址(发送者)和这个账户发送的交易数量(nonce)来计算的。...我们可以通过使用 CREATE2 函数来实现这一点。...但首先,我们需要一种方式与之交互。 为了简单,你也可以在 Etherscan 上验证该合约(例子合约代码[27]。),使用 MetaMask 连接到它并提取资金。...simpleWallet = new ethers.Contract(simpleWalletAddress, abi, signer); } main(); 你可以从 Chainstack 获得一个免费的公共节点.../goerli.etherscan.io/address/0xf49521d876d1add2d041dc220f13c7d63c10e736#code [28] 从Chainstack获得一个免费的公共节点

    96520

    xSurge事件中的重入漏洞+套利的完美组合利用

    该漏洞利用的代码是重入漏洞的典型代码,但利用过程却不是重入。应该是”最像重入漏洞的套利漏洞”。 随着 ERC20 合约的规范化,ERC20 的合约漏洞越来越少。...”,黑客看到这种机会,也期望着有更多的投入来套取更大的收益,于是,攻击者为了扩大这种攻击效果,使用了闪电贷,从Pancake中贷出来 10000 个BNB进行攻击,在一个区块中经过 8 次的“套利”,获得了...这里会调用purchase函数 receive() external payable { uint256 val = msg.value; address buyer =...此时攻击合约得到了 BNB,但攻击合约中的 xsurge 的数量还是没有减掉的。sell 方法中的 call 函数会把程序的控制权转换到攻击合约的 fallback 中。...使用quiknode提供的节点功能,可以成功,但 quiknode 速度稍慢一些。

    1.1K50

    智能合约安全审计技术概览

    (address payable recipient, uint256 amount) public returns (bool) 其中recipient是接收方的地址,amount是要转移的金额,函数返回值为...function send(address payable recipient, uint256 amount) public returns (bool) send函数与transfer函数类似,recipient...payable recipient, uint256 amount, bytes memory data) public returns (bool, bytes memory) 其中recipient...,这里的合约部署之后原先设计的构造函数"MyTokens"将变更为一个公共函数,任意用户可以通过调用该函数对合约进行多次初始化操作 pragma solidity ^0.4.0; contract MyToken...目前智能合约安全审计技术已经取得了一定的进展,但仍需要不断地进行研究和探索以应对日益复杂的区块链安全威胁,相信在未来,随着技术的不断进步和完善,智能合约安全审计将成为区块链应用开发的必要步骤,为区块链技术的发展提供重要的保障

    92740

    .netcore如何开发以太坊区块链示例 原

    此字节代码放在分类帐中并变为不可变但仍可以与之交互,并且可以更改状态。...没什么高大上的,也不是一个完整的应用程序,但很高兴看到我们能做什么。我们选择使用Azure Table存储来保持系统的持久性,它快速且便宜。...我们可以在方法SendRequestAsync中指定合约构造函数参数。在我们的情况下,我们指定2,因为合约发布时我们的余额应为2个以太币。 如上所述,必须挖掘部署才能获得合约地址。...首先,我们有合约的ABI和二进制代码,第二个是我们加载服务的构造函数。...合约中包含一个公共变量lastResult。可以调用此方法来获取当前状态。在与123签订合约后,余额为125。

    1.4K31

    设计规则

    在上述两种情况下,用于指定类型自变量的语法不同,但很容易混淆。...CA1012:抽象类型不应具有构造函数 抽象类型的构造函数只能由派生类型调用。 由于公共构造函数用于创建类型的实例,但无法为抽象类型创建实例,因此具有公共构造函数的抽象类在设计上是错误的。...CA1033:接口方法应可由子类型调用 未密封的外部可见类型提供了显式实现公共接口的方法,但没有提供具有相同名称的其他外部可见方法。...字段应为 private 或 internal,并应通过使用属性公开这些字段。...CA1053:静态容器类型不应具有构造函数 公共或嵌套公共类型只声明了静态成员,但具有公共或受保护的默认构造函数。 由于调用静态成员不需要类型的示例,因此没必要使用构造函数。

    2K20

    构建去中心化智能合约编程货币

    这是一台永远在线的公共状态机,你可以对其编程,世界上任何人都可以与它交互! 依赖条件 你需要事先安装 NodeJS>=10[5], Yarn[6]和 Git[7]....让我们在SmartContractWallet.sol中添加一个payable fallback()函数,使其可以接受交易。...但这是“可编程的货币”,让我们添加一些代码以将总ETH的数量限制为0.005(按今天的价格为1.00美元),以确保没有人在我们的未经审计的合约中投入100万美元。...这是一个公链,所以你应该假设一切都是公共的。...你还可以等待此tx()函数以获取生成的哈希,状态等。 当你写入地址公共所有者地址时,它会自动为此变量创建一个“getter”函数,我们可以通过useContractReader()钩子轻松地获取它。

    1.5K30

    dapp安全总结与典型安全事件

    上图为 Dapp的技术栈,用户的交易请求通过共识网络和区块数据结构驱动状态机的更新;公共的状态空间以及账户模型下的组合性,可以很方便地和最大限度地集合群体智慧,使得 Dapp具有无限的可能性。...但任何事物都具有两面性,新的业务形态也带来了复杂的安全形势。Dapp的开发基于密码学、账户模型、公共账本数据库和状态机、通证经济学等,与以前基于中心化数据库和服务器的 app,有很大不一样。...虽然 sell方法中有重入控制,但 purchase没有,重入控制只能阻止再次进入 sell方法,但依旧可以进入 purchase方法中进行购买操作。...黑客便是利用这个漏洞循环在交易[5]中循环进行买卖操作,每循环一次就能获取更多的 BNB DAO 场景 Beanstalk Farms 安全事件 在这次攻击事件中,攻击者创建了一个恶意提案,通过闪电贷获得了足够多的投票...QBridge 的 deposit 函数而非 depositETH 函数 handler 合约的 deposit 函数中会根据 resourceID 取出的所要充值的代币,而 ETH 对应的所要充值的代币为

    52620

    “危机四伏”的以太转账操作|以太转账安全风险——漏洞分析连载之八期

    而谈到不变量检查,开发者们趋向于信赖目前合约中存在的Ether,但实际上它能够被外部用户在无视合约内部规则的情况下操纵。...并且,开发者在学习Solidity的时候,容易产生一个误解,那就是一个合约只能通过payable函数接收Ether,而没有考虑到接收Ether,而不执行任何函数的情况。...我们以Ethernaut-King上的一个关卡作为案例合约: 无论谁发送一个大于当前奖金的ether,都会成为新的国王,被推翻的国王获得了新的奖金。...预先发送的 Ether 合约不使用 selfdestruct() 函数或调用任何 payable 函数仍可以接收到 Ether 的第二种方式是把 Ether 预发送到合约地址。...如果确实需要精确的余额值,那么应该定义一个状态变量,该变量在合约通过payable函数接收到ether的时候增加,用来安全的追踪合约收到的ether,并且,这个变量不会受到强制发送ether到合约(例如

    67820

    智能合约游戏之殇——Dice2win安全分析

    placeBet(uint betMask, uint modulo, uint commitLastBlock, uint commit, bytes32 r, bytes32 s) external payable...settleBetCommon(bet, reveal, blockHash); } 主要函数为placeBet和settleBet,其中placeBet函数主要为建立赌博,而settleBet为开奖。...而上面提到的选择中止攻击就是上面图的右边可能会出现的问题 整个流程最大的问题,就在于placebet和settlebet有强制的执行先后顺序,否则其中的一项block.number将取不到正确的数字,也正是应为如此...,当用户下注,placebet函数执行时,用户的下注信息就可以被服务端获得了,此时服务端有随机数、打包placebet的block.number、下注信息,服务端可以提前计算用户是否中奖,也就可以选择是否中止这次交易...让我们来看看这个函数的代码 跟入getDiceWinAmount函数,发现jackpotFee并不可控 其中JACKPOT_FEE = 0.001 ether,且要保证amount大于0.1 ether

    43910

    智能合约游戏之殇——Dice2win安全分析

    placeBet(uint betMask, uint modulo, uint commitLastBlock, uint commit, bytes32 r, bytes32 s) external payable...settleBetCommon(bet, reveal, blockHash); } 主要函数为placeBet和settleBet,其中placeBet函数主要为建立赌博,而settleBet...整个流程最大的问题,就在于placebet和settlebet有强制的执行先后顺序,否则其中的一项block.number将取不到正确的数字,也正是应为如此,当用户下注,placebet函数执行时,用户的下注信息就可以被服务端获得了...但这种攻击方式效果有效,主要有几个原因: Dice2win需要有一定算力的矿池才能主动影响链上的区块打包,但大部分算力仍然掌握在公开的矿池手中。所以这种攻击方式不适用于主动攻击。...原文中最后提到了一个refundBet函数的下溢,让我们来看看这个函数的代码 ? 跟入getDiceWinAmount函数,发现jackpotFee并不可控 ?

    70310

    Solidity 安全:已知攻击方法和常见防御模式综合列表

    攻击者可以(假定恶意合约地址为 0x0...123 )使用 EtherStore 合约地址作为构造函数参数来创建上述合约。这将初始化并将公共变量 etherStore 指向我们想要攻击的合约。...这里有两个例外,合约可能会收到了 Ether 但并不会执行任何函数。通过收到以太币来触发代码的合约,对强制将以太币发送到某个合约这类攻击是非常脆弱的。...通常,开发人员刚开始学习 Solidity 时,他们有一种误解,认为合约只能通过 payable 函数接受或获得 Ether。...有两种方式可以将 Ether(强制)发送给合约,而无需使用 payable 函数或执行合约中的任何代码。这些在下面列出。...预先发送的 Ether 合约不使用 selfdestruct() 函数或调用任何 payable 函数仍可以接收到 Ether 的第二种方式是把 Ether 预装进合约地址。

    1.4K30
    领券
    首页
    学习
    活动
    专区
    圈层
    工具