diff --git a/.github/.ghaignore b/.github/.ghaignore index 6452220d5..1dd589259 100644 --- a/.github/.ghaignore +++ b/.github/.ghaignore @@ -36,9 +36,6 @@ tokens/token-2022/group/anchor # error in tests tokens/external-delegate-token-master/anchor -# build failed - program outdated -tokens/token-2022/metadata/anchor - # dependency issues tokens/token-2022/nft-meta-data-pointer/anchor-example/anchor diff --git a/tokens/token-2022/metadata/anchor/package.json b/tokens/token-2022/metadata/anchor/package.json index f46c7b95c..b3b58fd7d 100644 --- a/tokens/token-2022/metadata/anchor/package.json +++ b/tokens/token-2022/metadata/anchor/package.json @@ -12,10 +12,11 @@ "@types/bn.js": "^5.1.0", "@types/chai": "^4.3.0", "@types/mocha": "^9.0.0", + "@types/node": "^22.19.1", "chai": "^4.3.4", "mocha": "^9.0.3", "prettier": "^2.6.2", "ts-mocha": "^10.0.0", - "typescript": "^5.3.3" + "typescript": "^5.5.0" } } diff --git a/tokens/token-2022/metadata/anchor/pnpm-lock.yaml b/tokens/token-2022/metadata/anchor/pnpm-lock.yaml index 733244d50..0157b09bf 100644 --- a/tokens/token-2022/metadata/anchor/pnpm-lock.yaml +++ b/tokens/token-2022/metadata/anchor/pnpm-lock.yaml @@ -24,6 +24,9 @@ importers: '@types/mocha': specifier: ^9.0.0 version: 9.1.1 + '@types/node': + specifier: ^22.19.1 + version: 22.20.1 chai: specifier: ^4.3.4 version: 4.4.1 @@ -37,7 +40,7 @@ importers: specifier: ^10.0.0 version: 10.0.0(mocha@9.2.2) typescript: - specifier: ^5.3.3 + specifier: ^5.5.0 version: 5.9.3 packages: @@ -149,11 +152,8 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@20.12.11': - resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==} - - '@types/node@24.8.0': - resolution: {integrity: sha512-5x08bUtU8hfboMTrJ7mEO4CpepS9yBwAqcL52y86SWNmbPX8LVbNs3EP4cNrIZgdjk2NAlP2ahNihozpoZIxSg==} + '@types/node@22.20.1': + resolution: {integrity: sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==} '@types/uuid@8.3.4': resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} @@ -392,6 +392,7 @@ packages: glob@7.2.0: resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me growl@1.10.5: resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} @@ -413,6 +414,7 @@ packages: inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -668,11 +670,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - undici-types@7.14.0: - resolution: {integrity: sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} utf-8-validate@5.0.10: resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} @@ -680,6 +679,7 @@ packages: uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true webidl-conversions@3.0.1: @@ -894,13 +894,13 @@ snapshots: '@types/bn.js@5.1.5': dependencies: - '@types/node': 20.12.11 + '@types/node': 22.20.1 '@types/chai@4.3.16': {} '@types/connect@3.4.38': dependencies: - '@types/node': 24.8.0 + '@types/node': 22.20.1 '@types/json5@0.0.29': optional: true @@ -909,23 +909,19 @@ snapshots: '@types/node@12.20.55': {} - '@types/node@20.12.11': + '@types/node@22.20.1': dependencies: - undici-types: 5.26.5 - - '@types/node@24.8.0': - dependencies: - undici-types: 7.14.0 + undici-types: 6.21.0 '@types/uuid@8.3.4': {} '@types/ws@7.4.7': dependencies: - '@types/node': 24.8.0 + '@types/node': 22.20.1 '@types/ws@8.18.1': dependencies: - '@types/node': 24.8.0 + '@types/node': 22.20.1 '@ungap/promise-all-settled@1.1.2': {} @@ -1413,9 +1409,7 @@ snapshots: typescript@5.9.3: {} - undici-types@5.26.5: {} - - undici-types@7.14.0: {} + undici-types@6.21.0: {} utf-8-validate@5.0.10: dependencies: diff --git a/tokens/token-2022/metadata/anchor/programs/metadata/Cargo.toml b/tokens/token-2022/metadata/anchor/programs/metadata/Cargo.toml index a0c953334..87fab924f 100644 --- a/tokens/token-2022/metadata/anchor/programs/metadata/Cargo.toml +++ b/tokens/token-2022/metadata/anchor/programs/metadata/Cargo.toml @@ -22,8 +22,8 @@ custom-panic = [] [dependencies] anchor-lang = "1.0.2" anchor-spl = "1.0.2" -spl-token-metadata-interface = "0.3.3" -spl-type-length-value = "0.4.3" +spl-token-metadata-interface = "0.8.0" +spl-type-length-value = "0.9.1" [lints.rust] unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] } diff --git a/tokens/token-2022/metadata/anchor/programs/metadata/src/instructions/initialize.rs b/tokens/token-2022/metadata/anchor/programs/metadata/src/instructions/initialize.rs index f03917e90..eada9f24b 100644 --- a/tokens/token-2022/metadata/anchor/programs/metadata/src/instructions/initialize.rs +++ b/tokens/token-2022/metadata/anchor/programs/metadata/src/instructions/initialize.rs @@ -1,7 +1,4 @@ use anchor_lang::prelude::*; -use anchor_lang::solana_program::rent::{ - DEFAULT_EXEMPTION_THRESHOLD, DEFAULT_LAMPORTS_PER_BYTE_YEAR, -}; use anchor_lang::system_program::{transfer, Transfer}; use anchor_spl::token_interface::{ token_metadata_initialize, Mint, Token2022, TokenMetadataInitialize, @@ -41,9 +38,11 @@ pub fn process_initialize(ctx: Context, args: TokenMetadataArgs) -> // Add 4 extra bytes for size of MetadataExtension (2 bytes for type, 2 bytes for length) let data_len = 4 + token_metadata.get_packed_len()?; - // Calculate lamports required for the additional metadata - let lamports = - data_len as u64 * DEFAULT_LAMPORTS_PER_BYTE_YEAR * DEFAULT_EXEMPTION_THRESHOLD as u64; + // Calculate lamports required for the additional metadata bytes only. + // The mint's base account overhead (128 bytes) is already funded by Anchor's `init`, + // so subtract minimum_balance(0) to avoid double-charging that overhead. + let rent = Rent::get()?; + let lamports = rent.minimum_balance(data_len).saturating_sub(rent.minimum_balance(0)); // Transfer additional lamports to mint account transfer( diff --git a/tokens/token-2022/metadata/anchor/programs/metadata/src/instructions/update_authority.rs b/tokens/token-2022/metadata/anchor/programs/metadata/src/instructions/update_authority.rs index 994712325..f68b619a7 100644 --- a/tokens/token-2022/metadata/anchor/programs/metadata/src/instructions/update_authority.rs +++ b/tokens/token-2022/metadata/anchor/programs/metadata/src/instructions/update_authority.rs @@ -29,7 +29,7 @@ pub fn process_update_authority(ctx: Context) -> Result<()> { CpiContext::new( ctx.accounts.token_program.key(), TokenMetadataUpdateAuthority { - token_program_id: ctx.accounts.token_program.to_account_info(), + program_id: ctx.accounts.token_program.to_account_info(), metadata: ctx.accounts.mint_account.to_account_info(), current_authority: ctx.accounts.current_authority.to_account_info(), diff --git a/tokens/token-2022/metadata/anchor/programs/metadata/src/instructions/update_field.rs b/tokens/token-2022/metadata/anchor/programs/metadata/src/instructions/update_field.rs index 2e94c7b1c..adb20b8f2 100644 --- a/tokens/token-2022/metadata/anchor/programs/metadata/src/instructions/update_field.rs +++ b/tokens/token-2022/metadata/anchor/programs/metadata/src/instructions/update_field.rs @@ -80,7 +80,7 @@ pub fn process_update_field(ctx: Context, args: UpdateFieldArgs) -> CpiContext::new( ctx.accounts.token_program.key(), TokenMetadataUpdateField { - token_program_id: ctx.accounts.token_program.to_account_info(), + program_id: ctx.accounts.token_program.to_account_info(), metadata: ctx.accounts.mint_account.to_account_info(), update_authority: ctx.accounts.authority.to_account_info(), }, diff --git a/tokens/token-2022/metadata/anchor/tsconfig.json b/tokens/token-2022/metadata/anchor/tsconfig.json index cd5d2e3d0..219f1fd62 100644 --- a/tokens/token-2022/metadata/anchor/tsconfig.json +++ b/tokens/token-2022/metadata/anchor/tsconfig.json @@ -1,10 +1,11 @@ { "compilerOptions": { - "types": ["mocha", "chai"], + "types": ["mocha", "chai", "node"], "typeRoots": ["./node_modules/@types"], - "lib": ["es2015"], + "lib": ["es2020"], "module": "commonjs", - "target": "es6", - "esModuleInterop": true + "target": "es2020", + "esModuleInterop": true, + "skipLibCheck": true } }