Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: release v0.1.0 #44

Merged
merged 50 commits into from
Mar 19, 2024
Merged
Changes from 1 commit
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
d32125e
Merge pull request #6 from axieinfinity/feature/lib-error-handler
TuDo1403 Nov 20, 2023
98c9c6f
Revert "feat(lib-error-handler): implement `LibErrorHandler`"
Nov 20, 2023
7224a37
Merge pull request #9 from axieinfinity/revert-3-implement-feature/li…
TuDo1403 Nov 20, 2023
88358f5
Revert "feat: add `LibErrorHandler`"
Nov 20, 2023
0ece11c
Merge pull request #10 from axieinfinity/revert-6-feature/lib-error-h…
TuDo1403 Nov 20, 2023
cda1f49
Merge pull request #11 from axieinfinity/merge/release/v0.1.0-feature…
TuDo1403 Nov 20, 2023
012efdd
feat: add LibErrorHandler
TuDo1403 Nov 20, 2023
44eedd9
Merge branch 'feature/lib-error-handler' into implement-feature/lib-e…
TuDo1403 Nov 20, 2023
970d0e2
Merge pull request #14 from axieinfinity/implement-feature/lib-error-…
TuDo1403 Nov 20, 2023
dcb5d7e
Merge pull request #15 from axieinfinity/feature/lib-error-handler
TuDo1403 Nov 20, 2023
662e6ac
Merge pull request #12 from axieinfinity/merge/release/v0.1.0-feature…
TuDo1403 Nov 20, 2023
058bb26
feat: add and happy case unit tests
TuDo1403 Nov 20, 2023
30b5cf6
format: reduce complex code
TuDo1403 Nov 20, 2023
db46592
Merge pull request #17 from axieinfinity/implement-feature/lib-native…
TuDo1403 Nov 20, 2023
1f34ca8
Merge pull request #18 from axieinfinity/feature/lib-native-transfer
TuDo1403 Nov 20, 2023
7ab1afa
feat: add LibSafeRange
TuDo1403 Dec 11, 2023
98deb3b
Merge pull request #19 from axieinfinity/merge/release/v0.1.0-feature…
TuDo1403 Dec 11, 2023
d9060b4
Merge branch 'mainnet' into release/v0.1.0
TuDo1403 Dec 11, 2023
4101852
Merge pull request #24 from axieinfinity/merge/release/v0.1.0-feature…
TuDo1403 Dec 11, 2023
e6e431a
Merge pull request #23 from axieinfinity/merge/release/v0.1.0-feature…
TuDo1403 Dec 11, 2023
edab1dd
Merge pull request #21 from axieinfinity/implement-feature/math/add-l…
TuDo1403 Dec 11, 2023
2c1ef48
chore: fix lib native transfer test
TuDo1403 Dec 11, 2023
57de895
Merge pull request #27 from axieinfinity/chore/fix-lib-native-transfe…
TuDo1403 Dec 11, 2023
f90720a
Merge pull request #29 from axieinfinity/merge/release/v0.1.0-feature…
TuDo1403 Dec 11, 2023
72649fb
Merge pull request #30 from axieinfinity/merge/release/v0.1.0-feature…
TuDo1403 Dec 11, 2023
2388600
Merge pull request #26 from axieinfinity/feature/math
TuDo1403 Dec 11, 2023
64ab683
Merge pull request #32 from axieinfinity/merge/release/v0.1.0-feature…
TuDo1403 Dec 11, 2023
3dbf045
feat: add token transfer libs
huyhuynh3103 Dec 30, 2023
7e3786b
feat: add ron transfer libs
huyhuynh3103 Dec 30, 2023
301210e
feat: add legacy transfer utils
huyhuynh3103 Jan 2, 2024
7768fd1
chore: fix convention
huyhuynh3103 Jan 2, 2024
1af4175
chore: fix convention
huyhuynh3103 Jan 2, 2024
0e00588
chore: use string.concat for string combination instead
huyhuynh3103 Jan 2, 2024
adb78b0
chore: use relative import and add docs
huyhuynh3103 Jan 2, 2024
5b6a631
Merge pull request #35 from axieinfinity/implement-feature/transfer/s…
huyhuynh3103 Jan 2, 2024
2141612
Merge pull request #36 from axieinfinity/feature/transfer
TuDo1403 Jan 2, 2024
e493095
chore: remove deep clone oz
TuDo1403 Mar 14, 2024
c482e1c
chore: remove deep clone forge-std
TuDo1403 Mar 14, 2024
03cca4d
forge install: forge-std
TuDo1403 Mar 14, 2024
ffcc91e
forge install: openzeppelin-contracts
TuDo1403 Mar 14, 2024
2404114
submodule: add shallow config
TuDo1403 Mar 14, 2024
463a082
chore: uncomment sol files
TuDo1403 Mar 14, 2024
a297690
chore: add permisison for husky files
TuDo1403 Mar 14, 2024
02804a1
chore: storage layout
TuDo1403 Mar 14, 2024
e5a96dd
chore: update husky files
TuDo1403 Mar 14, 2024
2e19e0e
chore: storage layout
TuDo1403 Mar 14, 2024
ba93be9
ci: bump create pull request package version
TuDo1403 Mar 14, 2024
68388fc
ci: bump create pull request package version
TuDo1403 Mar 14, 2024
8977377
Merge pull request #40 from axieinfinity/implement-feature/lib/shallo…
TuDo1403 Mar 14, 2024
e5fdb79
Merge pull request #41 from axieinfinity/feature/lib
TuDo1403 Mar 14, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
format: reduce complex code
TuDo1403 committed Nov 20, 2023
commit 30b5cf64471fab09d973f72d1d5ba055b55e9e87
34 changes: 2 additions & 32 deletions src/transfers/LibNativeTransfer.sol
Original file line number Diff line number Diff line change
@@ -1,49 +1,19 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import { Strings } from "@openzeppelin/contracts/utils/Strings.sol";
import { LibErrorHandler } from "../LibErrorHandler.sol";

using { toAmount } for Gas global;

enum Gas {
Strictly,
NoGriefing,
ForwardAll,
NoStorageWrite
}

/// @dev see: https://github.com/axieinfinity/ronin-dpos-contracts/pull/195
uint256 constant GAS_STIPEND_STRICT = 0;

/// @dev Suggested gas stipend for contract receiving NATIVE
/// that disallows any storage writes.
uint256 constant GAS_STIPEND_NO_STORAGE_WRITES = 2_300;

/// @dev Suggested gas stipend for contract receiving NATIVE to perform a few
/// storage reads and writes, but low enough to prevent griefing.
/// Multiply by a small constant (e.g. 2), if needed.
uint256 constant GAS_STIPEND_NO_GRIEF = 100_000;

function toAmount(Gas gas) view returns (uint256) {
if (gas == Gas.ForwardAll) return gasleft();
if (gas == Gas.NoGriefing) return GAS_STIPEND_NO_GRIEF;
if (gas == Gas.NoStorageWrite) return GAS_STIPEND_NO_STORAGE_WRITES;
return GAS_STIPEND_STRICT;
}

/**
* @title NativeTransferHelper
*/
library LibNativeTransfer {
using Strings for *;
using LibErrorHandler for bool;

/**
* @dev Transfers Native Coin and wraps result for the method caller to a recipient.
*/
function safeTransfer(address to, uint256 value, Gas gas) internal {
(bool success, bytes memory returnOrRevertData) = trySendValue(to, value, gas.toAmount());
function transfer(address to, uint256 value, uint256 gasAmount) internal {
(bool success, bytes memory returnOrRevertData) = trySendValue(to, value, gasAmount);
success.handleRevert(bytes4(0x0), returnOrRevertData);
}

22 changes: 7 additions & 15 deletions test/transfers/LibNativeTransfer.t.sol
Original file line number Diff line number Diff line change
@@ -2,40 +2,32 @@
pragma solidity ^0.8.23;

import { Test } from "forge-std/Test.sol";
import { Gas, LibNativeTransfer } from "contract-libs/transfers/LibNativeTransfer.sol";
import { LibNativeTransfer } from "contract-libs/transfers/LibNativeTransfer.sol";

contract LibNativeTransferTest is Test {
function testFork_RevertWhen_TransferNativeToContractWithoutFallback_safeTransfer(
address any,
uint256 amount,
uint8 v
uint256 gas
) external {
vm.deal(any, amount);
vm.expectRevert();
vm.prank(any);
LibNativeTransfer.safeTransfer(address(this), amount, _toGas(v));
LibNativeTransfer.transfer(address(this), amount, gas);
}

function testConcrete_TransferNative(uint8 v) external {
LibNativeTransfer.safeTransfer(address(0xBEEF), 1e18, _toGas(v));
function testConcrete_TransferNative(uint256 gas) external {
LibNativeTransfer.transfer(address(0xBEEF), 1e18, gas);
assertEq(address(0xBEEF).balance, 1e18);
}

function testFork_TransferNativeToRecipient(address recipient, uint256 amount, uint8 v) external {
function testFork_TransferNativeToRecipient(address recipient, uint256 amount, uint256 gas) external {
// Transferring to msg.sender can fail because it's possible to overflow their ETH balance as it begins non-zero.
if (recipient.code.length > 0 || uint256(uint160(recipient)) <= 18 || recipient == msg.sender) return;

amount = bound(amount, 0, address(this).balance);
LibNativeTransfer.safeTransfer(recipient, amount, _toGas(v));
LibNativeTransfer.transfer(recipient, amount, gas);

assertEq(recipient.balance, amount);
}

function _toGas(uint8 v) internal view returns (Gas gas) {
v = uint8(bound(v, 0, 3));
if (v == uint8(Gas.Strictly)) gas = Gas.Strictly;
if (v == uint8(Gas.NoGriefing)) gas = Gas.NoGriefing;
if (v == uint8(Gas.ForwardAll)) gas = Gas.ForwardAll;
if (v == uint8(Gas.NoStorageWrite)) gas = Gas.NoStorageWrite;
}
}