Skip to content

[WIP] ERC20 assets #7321

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

Draft
wants to merge 33 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
376d184
generate entrypoint functions
kumaryash90 Jun 11, 2025
2253ce5
Merge branch 'main' into yash/ocr-contracts-integration
MananTank Jun 23, 2025
6b816fb
Fix lint errors
MananTank Jun 23, 2025
7266b31
update package.json
MananTank Jun 23, 2025
47c87ea
remove export *
MananTank Jun 23, 2025
82cc116
remove export *
MananTank Jun 23, 2025
f44e15c
Merge branch 'main' into yash/ocr-contracts-integration
MananTank Jun 30, 2025
873e46d
base mainnet entrypoint
kumaryash90 Jun 30, 2025
b716941
fix entrypoint addr
kumaryash90 Jul 1, 2025
0d71393
fix lint
MananTank Jul 1, 2025
3b59656
Merge branch 'main' into yash/ocr-contracts-integration
MananTank Jul 7, 2025
6752878
Update contracts. New pool config encoder. Salt mixing
jakeloo Jul 10, 2025
2c8b80e
Fix build
MananTank Jul 10, 2025
3ea3f24
Merge branch 'main' into yash/ocr-contracts-integration
MananTank Jul 10, 2025
89e63f9
Update contracts. Add RewardLocker. Simplify assets
jakeloo Jul 15, 2025
9ed4e64
Update ABI and deployment
jakeloo Jul 15, 2025
6500b3d
Fix knip lint
MananTank Jul 15, 2025
cad9f80
fix build
MananTank Jul 15, 2025
f38c5f9
Merge branch 'main' into yash/ocr-contracts-integration
MananTank Jul 15, 2025
795ecd7
export getReward, run format
MananTank Jul 15, 2025
e1f1530
Update addresses
jakeloo Jul 16, 2025
09ca5c6
Update contract
jakeloo Jul 17, 2025
7e319a7
Merge branch 'main' into yash/ocr-contracts-integration
MananTank Jul 17, 2025
8dc959c
Update entrypoint contract
jakeloo Jul 18, 2025
9729174
pnpm run fix
MananTank Jul 22, 2025
583af3f
Merge branch 'main' into yash/ocr-contracts-integration
MananTank Jul 22, 2025
26f96d8
assets -> tokens. update contracts, remove unused
jakeloo Jul 23, 2025
705aa97
pnpm run fix
MananTank Jul 23, 2025
9f40f3e
Fix knip lint
MananTank Jul 23, 2025
ec263f6
Fix /tokens exports
MananTank Jul 23, 2025
4cb1582
export claimReward
MananTank Jul 23, 2025
5287079
delete /extensions/assets
MananTank Jul 23, 2025
fca8689
token salt guard
jakeloo Jul 23, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .changeset/young-carrots-burn.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"thirdweb": patch
---

ERC20 assets
110 changes: 59 additions & 51 deletions packages/thirdweb/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -97,128 +97,133 @@
},
"exports": {
".": {
"types": "./dist/types/exports/thirdweb.d.ts",
"default": "./dist/cjs/exports/thirdweb.js",
"import": "./dist/esm/exports/thirdweb.js",
"default": "./dist/cjs/exports/thirdweb.js"
"types": "./dist/types/exports/thirdweb.d.ts"
},
"./adapters/*": {
"types": "./dist/types/exports/adapters/*.d.ts",
"default": "./dist/cjs/exports/adapters/*.js",
"import": "./dist/esm/exports/adapters/*.js",
"default": "./dist/cjs/exports/adapters/*.js"
"types": "./dist/types/exports/adapters/*.d.ts"
},
"./ai": {
"types": "./dist/types/exports/ai.d.ts",
"default": "./dist/cjs/exports/ai.js",
"import": "./dist/esm/exports/ai.js",
"default": "./dist/cjs/exports/ai.js"
"types": "./dist/types/exports/ai.d.ts"
},
"./tokens": {
"default": "./dist/cjs/exports/tokens.js",
"import": "./dist/esm/exports/tokens.js",
"types": "./dist/types/exports/tokens.d.ts"
},
"./auth": {
"types": "./dist/types/exports/auth.d.ts",
"default": "./dist/cjs/exports/auth.js",
"import": "./dist/esm/exports/auth.js",
"default": "./dist/cjs/exports/auth.js"
"types": "./dist/types/exports/auth.d.ts"
},
"./bridge": {
"types": "./dist/types/exports/bridge.d.ts",
"default": "./dist/cjs/exports/bridge.js",
"import": "./dist/esm/exports/bridge.js",
"default": "./dist/cjs/exports/bridge.js"
"types": "./dist/types/exports/bridge.d.ts"
},
"./chains": {
"types": "./dist/types/exports/chains.d.ts",
"default": "./dist/cjs/exports/chains.js",
"import": "./dist/esm/exports/chains.js",
"default": "./dist/cjs/exports/chains.js"
"types": "./dist/types/exports/chains.d.ts"
},
"./contract": {
"types": "./dist/types/exports/contract.d.ts",
"default": "./dist/cjs/exports/contract.js",
"import": "./dist/esm/exports/contract.js",
"default": "./dist/cjs/exports/contract.js"
"types": "./dist/types/exports/contract.d.ts"
},
"./deploys": {
"types": "./dist/types/exports/deploys.d.ts",
"default": "./dist/cjs/exports/deploys.js",
"import": "./dist/esm/exports/deploys.js",
"default": "./dist/cjs/exports/deploys.js"
"types": "./dist/types/exports/deploys.d.ts"
},
"./engine": {
"types": "./dist/types/exports/engine.d.ts",
"default": "./dist/cjs/exports/engine.js",
"import": "./dist/esm/exports/engine.js",
"default": "./dist/cjs/exports/engine.js"
"types": "./dist/types/exports/engine.d.ts"
},
"./event": {
"types": "./dist/types/exports/event.d.ts",
"default": "./dist/cjs/exports/event.js",
"import": "./dist/esm/exports/event.js",
"default": "./dist/cjs/exports/event.js"
"types": "./dist/types/exports/event.d.ts"
},
"./extensions/*": {
"types": "./dist/types/exports/extensions/*.d.ts",
"default": "./dist/cjs/exports/extensions/*.js",
"import": "./dist/esm/exports/extensions/*.js",
"default": "./dist/cjs/exports/extensions/*.js"
"types": "./dist/types/exports/extensions/*.d.ts"
},
"./insight": {
"types": "./dist/types/exports/insight.d.ts",
"default": "./dist/cjs/exports/insight.js",
"import": "./dist/esm/exports/insight.js",
"default": "./dist/cjs/exports/insight.js"
"types": "./dist/types/exports/insight.d.ts"
},
"./modules": {
"types": "./dist/types/exports/modules.d.ts",
"default": "./dist/cjs/exports/modules.js",
"import": "./dist/esm/exports/modules.js",
"default": "./dist/cjs/exports/modules.js"
"types": "./dist/types/exports/modules.d.ts"
},
"./package.json": "./package.json",
"./pay": {
"types": "./dist/types/exports/pay.d.ts",
"default": "./dist/cjs/exports/pay.js",
"import": "./dist/esm/exports/pay.js",
"default": "./dist/cjs/exports/pay.js"
"types": "./dist/types/exports/pay.d.ts"
},
"./react": {
"types": "./dist/types/exports/react.d.ts",
"react-native": "./dist/esm/exports/react.native.js",
"default": "./dist/cjs/exports/react.js",
"import": "./dist/esm/exports/react.js",
"default": "./dist/cjs/exports/react.js"
"react-native": "./dist/esm/exports/react.native.js",
"types": "./dist/types/exports/react.d.ts"
},
"./react-native": {
"types": "./dist/types/exports/react.native.d.ts",
"default": "./dist/cjs/exports/react.native.js",
"import": "./dist/esm/exports/react.native.js",
"default": "./dist/cjs/exports/react.native.js"
"types": "./dist/types/exports/react.native.d.ts"
},
"./rpc": {
"types": "./dist/types/exports/rpc.d.ts",
"default": "./dist/cjs/exports/rpc.js",
"import": "./dist/esm/exports/rpc.js",
"default": "./dist/cjs/exports/rpc.js"
"types": "./dist/types/exports/rpc.d.ts"
},
"./social": {
"types": "./dist/types/exports/social.d.ts",
"default": "./dist/cjs/exports/social.js",
"import": "./dist/esm/exports/social.js",
"default": "./dist/cjs/exports/social.js"
"types": "./dist/types/exports/social.d.ts"
},
"./storage": {
"types": "./dist/types/exports/storage.d.ts",
"default": "./dist/cjs/exports/storage.js",
"import": "./dist/esm/exports/storage.js",
"default": "./dist/cjs/exports/storage.js"
"types": "./dist/types/exports/storage.d.ts"
},
"./transaction": {
"types": "./dist/types/exports/transaction.d.ts",
"default": "./dist/cjs/exports/transaction.js",
"import": "./dist/esm/exports/transaction.js",
"default": "./dist/cjs/exports/transaction.js"
"types": "./dist/types/exports/transaction.d.ts"
},
"./utils": {
"types": "./dist/types/exports/utils.d.ts",
"default": "./dist/cjs/exports/utils.js",
"import": "./dist/esm/exports/utils.js",
"default": "./dist/cjs/exports/utils.js"
"types": "./dist/types/exports/utils.d.ts"
},
"./wallets": {
"types": "./dist/types/exports/wallets.d.ts",
"react-native": "./dist/esm/exports/wallets.native.js",
"default": "./dist/cjs/exports/wallets.js",
"import": "./dist/esm/exports/wallets.js",
"default": "./dist/cjs/exports/wallets.js"
"react-native": "./dist/esm/exports/wallets.native.js",
"types": "./dist/types/exports/wallets.d.ts"
},
"./wallets/*": {
"types": "./dist/types/exports/wallets/*.d.ts",
"default": "./dist/cjs/exports/wallets/*.js",
"import": "./dist/esm/exports/wallets/*.js",
"default": "./dist/cjs/exports/wallets/*.js"
"types": "./dist/types/exports/wallets/*.d.ts"
},
"./wallets/in-app": {
"types": "./dist/types/exports/wallets/in-app.d.ts",
"react-native": "./dist/esm/exports/wallets/in-app.native.js",
"default": "./dist/cjs/exports/wallets/in-app.js",
"import": "./dist/esm/exports/wallets/in-app.js",
"default": "./dist/cjs/exports/wallets/in-app.js"
"react-native": "./dist/esm/exports/wallets/in-app.native.js",
"types": "./dist/types/exports/wallets/in-app.d.ts"
}
},
"files": [
Expand Down Expand Up @@ -347,6 +352,9 @@
"ai": [
"./dist/types/exports/ai.d.ts"
],
"tokens": [
"./dist/types/exports/tokens.d.ts"
],
"auth": [
"./dist/types/exports/auth.d.ts"
],
Expand Down
49 changes: 49 additions & 0 deletions packages/thirdweb/scripts/generate/abis/tokens/ERC20Asset.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
[
"constructor()",
"function DOMAIN_SEPARATOR() view returns (bytes32 result)",
"function allowance(address owner, address spender) view returns (uint256 result)",
"function approve(address spender, uint256 amount) returns (bool)",
"function balanceOf(address owner) view returns (uint256 result)",
"function burn(uint256 amount)",
"function burnFrom(address from, uint256 amount)",
"function cancelOwnershipHandover() payable",
"function completeOwnershipHandover(address pendingOwner) payable",
"function contractURI() view returns (string)",
"function decimals() view returns (uint8)",
"function initialize(string _name, string _symbol, string _contractURI, uint256 _maxSupply, address _owner)",
"function name() view returns (string)",
"function nonces(address owner) view returns (uint256 result)",
"function owner() view returns (address result)",
"function ownershipHandoverExpiresAt(address pendingOwner) view returns (uint256 result)",
"function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)",
"function renounceOwnership() payable",
"function requestOwnershipHandover() payable",
"function setContractURI(string _contractURI)",
"function supportsInterface(bytes4 interfaceId) pure returns (bool)",
"function symbol() view returns (string)",
"function totalSupply() view returns (uint256 result)",
"function transfer(address to, uint256 amount) returns (bool)",
"function transferFrom(address from, address to, uint256 amount) returns (bool)",
"function transferOwnership(address newOwner) payable",
"event Approval(address indexed owner, address indexed spender, uint256 amount)",
"event ContractURIUpdated()",
"event Initialized(uint64 version)",
"event OwnershipHandoverCanceled(address indexed pendingOwner)",
"event OwnershipHandoverRequested(address indexed pendingOwner)",
"event OwnershipTransferred(address indexed oldOwner, address indexed newOwner)",
"event Transfer(address indexed from, address indexed to, uint256 amount)",
"error AllowanceOverflow()",
"error AllowanceUnderflow()",
"error AlreadyInitialized()",
"error InsufficientAllowance()",
"error InsufficientBalance()",
"error InvalidInitialization()",
"error InvalidPermit()",
"error NewOwnerIsZeroAddress()",
"error NoHandoverRequest()",
"error NotInitializing()",
"error Permit2AllowanceIsFixedAtInfinity()",
"error PermitExpired()",
"error TotalSupplyOverflow()",
"error Unauthorized()"
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
[
"constructor()",
"function addImplementation((bytes32 contractId, address implementation, uint8 implementationType, uint8 createHook, bytes createHookData) config, bool isDefault)",
"function buy(address asset, (address recipient, address referrer, address tokenIn, uint256 amountIn, uint256 minAmountOut, uint256 deadline, bytes hookData) params) payable returns (uint256 amountIn, uint256 amountOut)",
"function cancelOwnershipHandover() payable",
"function claimReward(address asset)",
"function completeOwnershipHandover(address pendingOwner) payable",
"function create(address creator, (address referrer, bytes32 salt, bytes data, bytes hookData) createParams) payable returns (address asset)",
"function createById(bytes32 contractId, address creator, (address referrer, bytes32 salt, bytes data, bytes hookData) params) payable returns (address asset)",
"function createByImplementationConfig((bytes32 contractId, address implementation, uint8 implementationType, uint8 createHook, bytes createHookData) config, address creator, (address referrer, bytes32 salt, bytes data, bytes hookData) params) payable returns (address asset)",
"function distribute(address asset, (uint256 amount, address recipient)[] contents) payable",
"function getAirdrop() view returns (address airdrop)",
"function getImplementation(bytes32 contractId) view returns ((bytes32 contractId, address implementation, uint8 implementationType, uint8 createHook, bytes createHookData) config)",
"function getReward(address asset) view returns ((address positionManager, uint256 tokenId, address recipient, address referrer, uint16 referrerBps))",
"function getRewardLocker() view returns (address rewardLocker)",
"function getRouter() view returns (address router)",
"function guardSalt(bytes32 salt, address creator, bytes contractInitData, bytes hookInitData) view returns (bytes32)",
"function initialize(address owner, address router, address rewardLocker, address airdrop)",
"function owner() view returns (address result)",
"function ownershipHandoverExpiresAt(address pendingOwner) view returns (uint256 result)",
"function predictAddress(bytes32 contractId, address creator, (address referrer, bytes32 salt, bytes data, bytes hookData) params) view returns (address predicted)",
"function predictAddressByConfig((bytes32 contractId, address implementation, uint8 implementationType, uint8 createHook, bytes createHookData) config, address creator, (address referrer, bytes32 salt, bytes data, bytes hookData) params) view returns (address predicted)",
"function proxiableUUID() view returns (bytes32)",
"function renounceOwnership() payable",
"function requestOwnershipHandover() payable",
"function sell(address asset, (address recipient, address tokenOut, uint256 amountIn, uint256 minAmountOut, uint256 deadline, bytes hookData) params) returns (uint256 amountIn, uint256 amountOut)",
"function setAirdrop(address airdrop)",
"function setRewardLocker(address rewardLocker)",
"function setRouter(address router)",
"function transferOwnership(address newOwner) payable",
"function upgradeToAndCall(address newImplementation, bytes data) payable",
"event AirdropUpdated(address airdrop)",
"event Created(bytes32 contractId, address indexed creator, address indexed asset, address referrer, bytes aux)",
"event Distributed(address asset, uint256 recipientCount, uint256 totalAmount)",
"event ImplementationAdded(bytes32 contractId, address indexed implementation, uint8 implementationType, uint8 createHook, bytes createHookData)",
"event Initialized(uint64 version)",
"event OwnershipHandoverCanceled(address indexed pendingOwner)",
"event OwnershipHandoverRequested(address indexed pendingOwner)",
"event OwnershipTransferred(address indexed oldOwner, address indexed newOwner)",
"event RewardClaimed(address asset, address claimer)",
"event RewardLockerUpdated(address locker)",
"event RouterUpdated(address router)",
"event Upgraded(address indexed implementation)",
"error AlreadyInitialized()",
"error ArrayLengthMismatch()",
"error ImplementationAlreadyExists()",
"error InvalidAmount()",
"error InvalidContractId()",
"error InvalidCreateHook()",
"error InvalidCreator()",
"error InvalidDeploymentCall()",
"error InvalidImplementation()",
"error InvalidInitialization()",
"error InvalidPoolAmount()",
"error InvalidSaltFlags()",
"error InvalidValue()",
"error NewOwnerIsZeroAddress()",
"error NoHandoverRequest()",
"error NotInitializing()",
"error NotRegistered()",
"error Unauthorized()",
"error UnauthorizedCallContext()",
"error UpgradeFailed()",
"error ValueTransferFailed()"
]
47 changes: 47 additions & 0 deletions packages/thirdweb/scripts/generate/abis/tokens/FeeManager.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
[
"constructor(address _owner, address _feeRecipient)",
"function ROLE_FEE_MANAGER() view returns (uint256)",
"function calculateFee(address payer, bytes4 action, uint256 amount, uint256 maxFeeAmount) view returns (address recipient, uint256 feeAmount)",
"function cancelOwnershipHandover() payable",
"function completeOwnershipHandover(address pendingOwner) payable",
"function domainSeparator() view returns (bytes32)",
"function eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)",
"function feeConfigs(address target, bytes4 action) view returns (address recipient, uint8 feeType, uint256 value)",
"function feeRecipient() view returns (address)",
"function getFeeConfig(address target, bytes4 action) view returns ((address recipient, uint8 feeType, uint256 value) config)",
"function grantRoles(address user, uint256 roles) payable",
"function hasAllRoles(address user, uint256 roles) view returns (bool)",
"function hasAnyRole(address user, uint256 roles) view returns (bool)",
"function owner() view returns (address result)",
"function ownershipHandoverExpiresAt(address pendingOwner) view returns (uint256 result)",
"function renounceOwnership() payable",
"function renounceRoles(uint256 roles) payable",
"function requestOwnershipHandover() payable",
"function revokeRoles(address user, uint256 roles) payable",
"function rolesOf(address user) view returns (uint256 roles)",
"function setFeeConfig(bytes4 action, uint8 feeType, uint256 value)",
"function setFeeConfigBySignature(address target, bytes4 action, address recipient, uint8 feeType, uint256 value, uint256 nonce, uint256 deadline, bytes signature)",
"function setFeeRecipient(address _feeRecipient)",
"function setTargetFeeConfig(address target, bytes4 action, address recipient, uint8 feeType, uint256 value)",
"function transferOwnership(address newOwner) payable",
"function usedNonces(bytes32 signerNonce) view returns (bool used)",
"event FeeConfigUpdated(address indexed target, bytes4 indexed action, address recipient, uint8 feeType, uint256 value)",
"event FeeConfigUpdatedBySignature(address indexed signer, address indexed target, bytes4 indexed action, address recipient, uint8 feeType, uint256 value)",
"event FeeRecipientUpdated(address feeRecipient)",
"event OwnershipHandoverCanceled(address indexed pendingOwner)",
"event OwnershipHandoverRequested(address indexed pendingOwner)",
"event OwnershipTransferred(address indexed oldOwner, address indexed newOwner)",
"event RolesUpdated(address indexed user, uint256 indexed roles)",
"error AlreadyInitialized()",
"error InvalidConfig()",
"error InvalidFeeType()",
"error InvalidModule()",
"error InvalidNonce()",
"error InvalidRecipient()",
"error InvalidSignature()",
"error InvalidValue()",
"error NewOwnerIsZeroAddress()",
"error NoHandoverRequest()",
"error SignatureExpired()",
"error Unauthorized()"
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[
"constructor(address _feeManager, address _v3PositionManager, address _v4PositionManager)",
"function collectReward(address owner, address asset) returns (address token0, address token1, uint256 amount0, uint256 amount1)",
"function feeManager() view returns (address)",
"function lockPosition(address asset, address positionManager, uint256 tokenId, address recipient, address referrer, uint16 referrerBps)",
"function positions(address owner, address asset) view returns (address positionManager, uint256 tokenId, address recipient, address referrer, uint16 referrerBps)",
"function v3PositionManager() view returns (address)",
"function v4PositionManager() view returns (address)",
"event PositionLocked(address indexed owner, address indexed asset, address positionManager, uint256 tokenId, address recipient, address referrer)",
"event RewardCollected(address indexed owner, address indexed asset, address positionManager, uint256 tokenId, uint256 amount0, uint256 amount1)",
"error InvalidPosition()",
"error InvalidPositionManager()",
"error InvalidReferrerBps()",
"error InvalidRewardRecipient()",
"error TokenAlreadyLocked()"
]
Loading
Loading