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 20 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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"
},
"./assets": {
"default": "./dist/cjs/exports/assets.js",
"import": "./dist/esm/exports/assets.js",
"types": "./dist/types/exports/assets.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"
],
"assets": [
"./dist/types/exports/assets.d.ts"
],
"auth": [
"./dist/types/exports/auth.d.ts"
],
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[
"function deployInfraProxyDeterministic(address implementation, bytes data, bytes32 salt, bytes extraData) returns (address deployedProxy)",
"event AssetInfraDeployed(address indexed implementation, address indexed proxy, bytes32 inputSalt, bytes data, bytes extraData)",
"error ProxyDeploymentFailed()"
]
49 changes: 49 additions & 0 deletions packages/thirdweb/scripts/generate/abis/assets/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,68 @@
[
"constructor()",
"function addImplementation((bytes32 contractId, address implementation, uint8 implementationType, uint8 createHook, bytes createHookData) config, bool isDefault)",
"function buyAsset(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 createAsset(address creator, (uint256 amount, address referrer, bytes32 salt, bytes data, bytes hookData) createParams) returns (address asset)",
"function createAssetById(bytes32 contractId, address creator, (uint256 amount, address referrer, bytes32 salt, bytes data, bytes hookData) params) returns (address asset)",
"function createAssetByImplementationConfig((bytes32 contractId, address implementation, uint8 implementationType, uint8 createHook, bytes createHookData) config, address creator, (uint256 amount, address referrer, bytes32 salt, bytes data, bytes hookData) params) returns (address asset)",
"function decodeOwnerFromInitData(bytes data) pure returns (address owner)",
"function distributeAsset(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 listAsset(address asset, (address tokenOut, uint256 pricePerUnit, uint8 priceDenominator, uint256 totalSupply, uint48 startTime, uint48 endTime, address hook, bytes createHookData) params) returns (address sale, address position, uint256 positionId)",
"function owner() view returns (address result)",
"function ownershipHandoverExpiresAt(address pendingOwner) view returns (uint256 result)",
"function predictAssetAddress(bytes32 contractId, address creator, (uint256 amount, address referrer, bytes32 salt, bytes data, bytes hookData) params) view returns (address predicted)",
"function predictAssetAddressByConfig((bytes32 contractId, address implementation, uint8 implementationType, uint8 createHook, bytes createHookData) config, address creator, (uint256 amount, 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 sellAsset(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 AssetCreated(bytes32 contractId, address indexed creator, address indexed asset, address referrer, bytes aux)",
"event AssetDistributed(address asset, uint256 recipientCount, uint256 totalAmount)",
"event AssetRewardClaimed(address asset, address claimer)",
"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 RewardLockerUpdated(address locker)",
"event RouterUpdated(address router)",
"event Upgraded(address indexed implementation)",
"error AlreadyInitialized()",
"error ArrayLengthMismatch()",
"error AssetNotRegistered()",
"error CreateHookFailed()",
"error CreateHookReverted(string reason)",
"error ImplementationAlreadyExists()",
"error InvalidContractId()",
"error InvalidCreateHook()",
"error InvalidCreator()",
"error InvalidDeploymentArgs()",
"error InvalidImplementation()",
"error InvalidInitialization()",
"error InvalidInitializer()",
"error InvalidSaltFlags()",
"error InvalidValue()",
"error NewOwnerIsZeroAddress()",
"error NoHandoverRequest()",
"error NotInitializing()",
"error Unauthorized()",
"error UnauthorizedCallContext()",
"error UpgradeFailed()",
"error ValueTransferFailed()"
]
47 changes: 47 additions & 0 deletions packages/thirdweb/scripts/generate/abis/assets/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