{"id":23402592,"url":"https://github.com/martincastroalvarez/solana-token-rust","last_synced_at":"2025-07-08T04:07:07.483Z","repository":{"id":69997723,"uuid":"462228012","full_name":"MartinCastroAlvarez/solana-token-rust","owner":"MartinCastroAlvarez","description":"Solana token, NFT and program with Rust","archived":false,"fork":false,"pushed_at":"2022-03-14T23:23:47.000Z","size":6015,"stargazers_count":7,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-05T11:11:35.241Z","etag":null,"topics":["rust","solana"],"latest_commit_sha":null,"homepage":"https://martincastroalvarez.com","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MartinCastroAlvarez.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-02-22T09:36:15.000Z","updated_at":"2024-12-23T03:18:12.000Z","dependencies_parsed_at":"2023-03-10T20:45:12.659Z","dependency_job_id":null,"html_url":"https://github.com/MartinCastroAlvarez/solana-token-rust","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/MartinCastroAlvarez/solana-token-rust","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MartinCastroAlvarez%2Fsolana-token-rust","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MartinCastroAlvarez%2Fsolana-token-rust/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MartinCastroAlvarez%2Fsolana-token-rust/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MartinCastroAlvarez%2Fsolana-token-rust/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MartinCastroAlvarez","download_url":"https://codeload.github.com/MartinCastroAlvarez/solana-token-rust/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MartinCastroAlvarez%2Fsolana-token-rust/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264192316,"owners_count":23570759,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["rust","solana"],"created_at":"2024-12-22T12:29:36.015Z","updated_at":"2025-07-08T04:07:07.467Z","avatar_url":"https://github.com/MartinCastroAlvarez.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Solana NFT\n\n![sol](./sol.jpg)\n\n## 1 Table of Contents\n\n- [1 Table of Contents](#1-table-of-contents)\n- [2 References](#2-references)\n- [3 Fractals Marketplace](#3-fractals-marketplace)\n- [4 Installation](#4-installation)\n- [5 Running a Validator](#5-running-a-validator)\n- [6 Connecting a Wallet](#6-connecting-a-wallet)\n- [7 Creating a Token](#7-creating-a-token)\n- [8 Creating an NFT](#8-creating-an-nft)\n- [9 Listing the Token](#9-listing-the-token)\n- [10 Transferring Tokens](#10-transferring-tokens)\n- [11 Rust Development](#11-rust-development)\n- [12 Deploying a Program](#12-deploying-a-program)\n- [13 Approvals](#13-approvals)\n\n## 2 References\n\n- [Solana CLI Usage](https://docs.solana.com/cli/usage)\n- [Getting Started with MetaPlex](https://docs.metaplex.com/token-metadata/getting-started)\n- [File System Wallet](https://docs.solana.com/wallet-guide/file-system-wallet)\n- [Install the Solana Tool Suite](https://docs.solana.com/cli/install-solana-cli-tools)\n- [How To Transfer Eth Assets to Solana Using Wormhole ](https://blog.mercurial.finance/how-to-transfer-eth-assets-to-solana-using-wormhole-v2-514e728dc4fc)\n- [Neon](https://docs.neon-labs.org/docs/intro)\n- [Creating an NFT on Solana with Metaplex Candy Machine](https://dev.to/devindxdeveloper/creating-an-nft-on-solana-with-metaplex-candy-machine-4agp)\n- [fractals.is](https://www.fractal.is/)\n- [Solana Discord Channel](https://discord.com/invite/solana)\n- [Token Metadata](https://docs.metaplex.com/token-metadata/getting-started)\n- [Cargo Installation](https://doc.rust-lang.org/cargo/getting-started/installation.html)\n- [Deploy a Program](https://docs.solana.com/cli/deploy-a-program)\n\n## 3 Fractals Marketplace\n\n#### 3.1 Visit [https://www.fractal.is/](https://www.fractal.is/)\n\n![fractals1.png](./fractals1.png)\n\n#### 3.2 Look at the latest NFTs\n\n![fractals2.png](./fractals2.png)\n\n#### 3.3 Visit [NEKO #591](https://www.fractal.is/4809210122469376/5074427943321600/AU89dkTtXt8GBaTt6e4LE35rQeztWaSS6CJ3Ny1XFn8)\n\n![fractals3.png](./fractals3.png)\n\n#### 3.4 Look at the transactions associated with the token\n\n![fractals4.png](./fractals4.png)\n\n#### 3.5 Visit the [Solana Explorer](https://explorer.solana.com/address/AU89dkTtXt8GBaTt6e4LE35rQeztWaSS6CJ3Ny1XFn8)\n\n![fractals5.png](./fractals5.png)\n\n#### 3.6 Look at the [Metadata](https://explorer.solana.com/address/AU89dkTtXt8GBaTt6e4LE35rQeztWaSS6CJ3Ny1XFn8/metadata)\n\n![fractals6.png](./fractals6.png)\n\n#### 3.7 Look at the [Instructions](https://explorer.solana.com/address/AU89dkTtXt8GBaTt6e4LE35rQeztWaSS6CJ3Ny1XFn8/instructions)\n\n![fractals7.png](./fractals7.png)\n\n## 4 Installation\n\n### 4.1 [Python SDK](https://michaelhly.github.io/solana-py/)\n\nInstalling the SDK is not recommended. It is just a wrapper for the OS `solana-cli` which captures the output on STDOUT and transforms it into Python code. However, if the `solana-cli` version is incompatible, it does not work properly.\n\n### 4.2 [moralis.io](https://moralis.io/moralis-releases-solana-api/)\n\nIt can can be used to interact with the Blockchain. For example:\n```bash\ncurl -X GET \"https://solana-gateway.moralis.io/account/devnet/GRbqKQ332wWMsFU43N3VSY9EhhPsNKZh3sszhXdsQSR3/balance?cluster=devnet\" -H \"X-Api-Key: sBpG7zBJbKgI7DXHUWnqYxxgWveqpoQZ0mbCqti0SnfV7GQxyoKneiIGyd9lMx4q\"\n```\n```bash\n{\n    \"lamports\":\"24982265600\",\n    \"solana\":\"24.9822656\"\n}\n```\n\n![moralis.png](./moralis.png)\n\n### 4.3 [Neon](https://neon-labs.org/)\n\nThis tool provides an abstraction layer which provides an Ethereum-like interface to the Solana network.\n\n![neon.png](./neon.png)\n\n### 4.4 Local Development\n\n#### 4.4.1 Install the Solana release v1.9.8 on your machine\n```bash\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\nsh -c \"$(curl -sSfL https://release.solana.com/v1.9.8/install)\"\nsource $HOME/.cargo/env\n```\n\n#### 4.4.2 Confirm that Rust was installed\n```bash\nrustc --version\n```\n```bash\nrustc 1.59.0 (9d1b2106e 2022-02-23)\n```\n\n#### 4.4.3 Confirm that Cargo was intsalled\n```bash\ncargo -V\n```\n```bash\ncargo 1.59.0 (49d8809dc 2022-02-10)\n```\n\n#### 4.4.4 Confirm you have the desired version of solana installed\n```bash\nsolana --version\n```\n```bash\nsolana-cli 1.9.8 (src:4ebeb336; feat:2191737503)\n```\n\n#### 4.4.5 Metaplex\n```bash\ngit clone https://github.com/metaplex-foundation/metaplex.git\ncd metaplex\ngit checkout v1.1.1\ncd js \u0026\u0026 yarn install \u0026\u0026 yarn bootstrap\nnpm install -g typescript\n```\n\n## 5 Running a Validator\n\nThere is no need to run our own validator.\n\n#### 5.1 Synchronous Commands\n\nMost commands have this flag to wait for confirmation before returning.\n\n```bash\nspl-token transfer --help\n```\n```bash\n[...]\n    --no-wait   Return signature immediately after submitting the transaction,\n                instead of waiting for confirmations.\n[...]\n```\n\n#### 5.2 Watch for logs in real time. It generates ~10.000 lines in 5 seconds.\n```bash\nsolana logs | tee test.log\n```\n```bash\nTransaction executed in slot 116878215:\n  Signature: 53gEBYVA453FhxButWmfZb8Nkj8c19eUKkqE9FMZZ1kHPHF5gXkmzZ5wPVFxVXu2qAzKDQKsgxfU5apzTpnufj1G\n  Status: Ok\n  Log Messages:\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s invoke [1]\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s consumed 2506 of 200000 compute units\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s success\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s invoke [1]\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s consumed 2496 of 200000 compute units\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s success\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s invoke [1]\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s consumed 2511 of 200000 compute units\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s success\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s invoke [1]\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s consumed 2494 of 200000 compute units\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s success\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s invoke [1]\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s consumed 2555 of 200000 compute units\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s success\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s invoke [1]\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s consumed 2535 of 200000 compute units\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s success\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s invoke [1]\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s consumed 2557 of 200000 compute units\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s success\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s invoke [1]\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s consumed 2537 of 200000 compute units\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s success\nTransaction executed in slot 116878215:\n  Signature: 3LvGbTSNeb6jZ5hhW7GgagXGzMg5DtrRuaRVeRqWaDQEJ9VzYjo9psrDX7yDEqYWw6pmETJVMGMKKhNp8Y68JKEP\n  Status: Error processing Instruction 0: invalid program argument\n  Log Messages:\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s invoke [1]\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s consumed 594 of 200000 compute units\n    Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s failed: invalid program argument\n```\n\n## 6 Connecting a Wallet\n\n#### 6.1 Use Solana's command-line tool solana-keygen to generate keypair files\n```bash\nsolana-keygen new --outfile key.json\n```\n```bash\nGenerating a new keypair\n[...]\nWrote new keypair to key.json\n=============================================================================\npubkey: GRbqKQ332wWMsFU43N3VSY9EhhPsNKZh3sszhXdsQSR3\n=============================================================================\nSave this seed phrase and your BIP39 passphrase to recover your new keypair:\nmixture code leopard relax nice debris truth close differ hurry donor balcony\n=============================================================================\n```\n\n#### 6.2 Retrieve the private key from the json file\n```bash\ncat key.json\n```\n```bash\n[41,88,225,51,18,0,227,73,125,103,15,76,72,117,150,92,125,181,75,247,58,25,210,119,4,84,64,158,138,249,239,209,229,44,161,17,139,218,26,171,96,204,62,111,122,15,174,13,108,108,173,221,27,98,122,203,2,74,235,143,157,13,195,174]\n```\n\n#### 6.3 Verify you hold the private key for a given address\n```bash\nsolana-keygen verify GRbqKQ332wWMsFU43N3VSY9EhhPsNKZh3sszhXdsQSR3 key.json\n```\n```bash\nVerification for public key: GRbqKQ332wWMsFU43N3VSY9EhhPsNKZh3sszhXdsQSR3: Success\n```\n\n#### 6.4 Set the local environment to authenticate its requests with the new wallet\n```bash\nsolana config set --keypair key.json \n```\n```bash\nConfig File: /home/martinalejandrocastroalvarez/.config/solana/cli/config.yml\nRPC URL: https://api.mainnet-beta.solana.com \nWebSocket URL: wss://api.mainnet-beta.solana.com/ (computed)\nKeypair Path: key.json \nCommitment: confirmed \n```\n\n#### 6.5 Open the wallet on the Solana explorer\n\n- [mainet](https://explorer.solana.com/address/GRbqKQ332wWMsFU43N3VSY9EhhPsNKZh3sszhXdsQSR3)\n- [devnet](https://explorer.solana.com/address/GRbqKQ332wWMsFU43N3VSY9EhhPsNKZh3sszhXdsQSR3?cluster=devnet)\n\n![wallet.png](./wallet.png)\n\n#### 6.6 Connect to the devnet cluster\n```bash\nsolana config set --url devnet\n```\n```bash\nConfig File: /home/martinalejandrocastroalvarez/.config/solana/cli/config.yml\nRPC URL: https://api.devnet.solana.com \nWebSocket URL: wss://api.devnet.solana.com/ (computed)\nKeypair Path: key.json \nCommitment: confirmed \n```\n\n![clusters.png](./clusters.png)\n\n#### 6.7 Add SOL to your wallet on devnet\n```bash\nsolana airdrop 1 GRbqKQ332wWMsFU43N3VSY9EhhPsNKZh3sszhXdsQSR3\n```\n```bash\nSignature: 2RkG5e9TZozHQFVqGBaB5pwpSwo1CEiZYud4C5BwFSybN3S8gjQp41hUBqQ533fa7WcLukP5uHE9SnB9e86Ni8Nu\n```\nMore about [Signatures](https://coinyuppie.com/is-it-an-authorized-transfer-or-a-direct-steal-solana-authorized-phishing-event-analysis/):\n```\nSignature Diffusion Mechanism in Solana\n\nIn Solana, there is a signature diffusion mechanism. The user calls contract A, and the user in contract A has signed and approved it. When contract A calls contract B internally, the user’s signature will spread to contract B along with the cross-contract call. Therefore, in contract B, the user is also signed to approve. So there is a security risk here. When signing a malicious contract, the malicious contract obtains our signature, but it can do anything with our signature! ! ! ! ! ! !\n\nIn the above-mentioned theft incident, the user made a transaction with the malicious contract 3VtjHnDuDD1QreJiYNziDsdkeALMT6b2F9j3AXdL4q8v, which directly called the system contract to transfer the user’s SOL, because the signature spread to the system contract along with the call, so the system contract considered the transaction It is also approved and normal, so the user’s assets are transferred.\n```\n\n## 7 Creating a Token\n\n#### 7.1 Create a new token\n```bash\nspl-token create-token --decimals 10 --owner ./key.json\n```\n```bash\nCreating token AqoJM91CTkXXhyx8qi5HJZGPaozRHc33zSyXz1EnTnWn \nSignature: 44CPkEej8Mz2okM41673XGWDmARpykn7gfFEzySSmj51vhYivmwkJycCVV1Xdno3MzexQQF5u8XK1e5fkbRhEmnd\n```\n\n#### 7.1 Open the new token on the Solana explorer\n\n- [mainet](https://explorer.solana.com/address/AqoJM91CTkXXhyx8qi5HJZGPaozRHc33zSyXz1EnTnWn)\n- [devnet](https://explorer.solana.com/address/AqoJM91CTkXXhyx8qi5HJZGPaozRHc33zSyXz1EnTnWn?cluster=devnet)\n\n![token.png](./token.png)\n\n#### 7.2 Create an account on your wallet to hold the token\n```bash\nspl-token create-account AqoJM91CTkXXhyx8qi5HJZGPaozRHc33zSyXz1EnTnWn --owner ./key.json\n```\n```bash\nCreating account 6WbLiFB765NT3RXBUNxzvFkitPmiBuyDTLpiuP6G2Hh8\nSignature: 2JDWfThLe8dN1sCPvn8pUuwAgfH3ZLVnjW741pvvr3xiwSvWxtWoCGDxt3zzsCCNFMxhPyDrAY6Q5WoxwWw1dXUN\n```\nTrying to create multiple accounts for the same token generates the following error:\n```bash\nCreating account 6WbLiFB765NT3RXBUNxzvFkitPmiBuyDTLpiuP6G2Hh8\nError: Account already exists: 6WbLiFB765NT3RXBUNxzvFkitPmiBuyDTLpiuP6G2Hh8\n```\n\n#### 7.3 Mint token\n```bash\nspl-token mint AqoJM91CTkXXhyx8qi5HJZGPaozRHc33zSyXz1EnTnWn 1000000 --owner ./key.json\n```\n```bash\nMinting 1000000 tokens\n  Token: AqoJM91CTkXXhyx8qi5HJZGPaozRHc33zSyXz1EnTnWn\n  Recipient: 6WbLiFB765NT3RXBUNxzvFkitPmiBuyDTLpiuP6G2Hh8\n```\n\n#### 7.4 Disable minting to set the token supply\n```bash\nspl-token authorize AqoJM91CTkXXhyx8qi5HJZGPaozRHc33zSyXz1EnTnWn mint --disable --owner ./key.json\n```\n```bash\nUpdating AqoJM91CTkXXhyx8qi5HJZGPaozRHc33zSyXz1EnTnWn\n  Current mint authority: GRbqKQ332wWMsFU43N3VSY9EhhPsNKZh3sszhXdsQSR3\n  New mint authority: disabled\n```\n\n#### 7.5 Check the token supply\n```bash\nspl-token supply AqoJM91CTkXXhyx8qi5HJZGPaozRHc33zSyXz1EnTnWn\n```\n```bash\n300\n```\n\n#### 7.6 Check your balance\n```bash\nspl-token balance AqoJM91CTkXXhyx8qi5HJZGPaozRHc33zSyXz1EnTnWn --owner ./key.json\n```\n```bash\n1000000\n```\n\n#### 7.7 Open the account on the Solana explorer to check your balance\n\n- [mainet](https://explorer.solana.com/address/6WbLiFB765NT3RXBUNxzvFkitPmiBuyDTLpiuP6G2Hh8)\n- [devnet](https://explorer.solana.com/address/6WbLiFB765NT3RXBUNxzvFkitPmiBuyDTLpiuP6G2Hh8?cluster=devnet)\n\n![account.png](./account.png)\n\n## 8 Creating an NFT \n\n#### 8.1 Create a [config file](./assets/0.json) according to the [Token Metadata Program](https://docs.metaplex.com/token-metadata/specification)\n```javascript\n{\n  \"name\": \"Nisman\",\n  \"symbol\": \"\",\n  \"description\": \"Lorem Ipsum Dolor\",\n  \"image\": \"0.jpeg\",\n  \"animation_image\": \"0.jpeg\",\n  \"external_url\": \"0.jpeg\",\n  \"attributes\": [\n    {\n      \"trait_type\": \"attack\",\n      \"value\": \"4\"\n    },\n    {\n      \"trait_type\": \"defense\",\n      \"value\": \"3\"\n    },\n    {\n      \"trait_type\": \"durability\",\n      \"value\": \"47\"\n    },\n    {\n      \"trait_type\": \"components\",\n      \"value\": \"iron: 10; carbon: 1; wood: 2\"\n    }\n  ]\n}\n```\n\n#### 8.2 Create an [image file](./assets/0.jpeg)\n\n![image](./assets/0.jpeg)\n\n#### 8.3 Create a [config file](./candy.json) for the Candy Machine\n```bash\n{\n    \"price\": 10.0,\n    \"number\": null,\n    \"gatekeeper\": null,\n    \"solTreasuryAccount\": \"GRbqKQ332wWMsFU43N3VSY9EhhPsNKZh3sszhXdsQSR3\",\n    \"goLiveDate\": \"28 Feb 2022 00:00:00 GMT\",\n    \"storage\": \"nft-storage\",\n    \"awsS3Bucket\": null,\n    \"noRetainAuthority\": true,\n    \"noMutable\": true,\n    \"splTokenAccount\": null,\n    \"splToken\": null,\n    \"endSettings\": null,\n    \"whitelistMintSettings\": null,\n    \"hiddenSettings\": null,\n    \"ipfsInfuraProjectId\": null,\n    \"ipfsInfuraSecret\": null,\n    \"nftStorageKey\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkaWQ6ZXRocjoweDA2MDI0RGM0QmY2MUJiZjVEQjU1RkRFNGM4QzFkMGU0OTE5ZTI0MjgiLCJpc3MiOiJuZnQtc3RvcmFnZSIsImlhdCI6MTY0NjA5MTAxNDU5NywibmFtZSI6ImVzdCJ9.d9Ftb5H2Wd-Gs-0Jzk1ehG0LtjQiu5G_DVlM8TU8sew\"\n}\n```\n\n#### 8.4 Use Metaplex to upload the config for the NFT(s)\n```bash\nnpx ts-node ./metaplex/js/packages/cli/src/candy-machine-v2-cli.ts upload \\\n    --env devnet --keypair ./key.json --config-path ./candy.json ./assets/\neark``\n```bash\nwallet public key: GRbqKQ332wWMsFU43N3VSY9EhhPsNKZh3sszhXdsQSR3\nBeginning the upload for 2 (img+json) pairs\nstarted at: 1646001449493\ninitialized config for a candy machine with publickey: 8vjuNEaUwjJJTRcGg66yywYbBJUu3ipNRYvPRULwkxri\nUploading Size 0 { mediaExt: '.jpeg', index: '0' }\nUploading Size 1 { mediaExt: '.jpeg', index: '1' }\nDone. Successful = true.\nended at: 2022-02-27T22:37:29.499Z. time taken: 00:00:00\n```\n\n#### 8.5 Verify the upload using Metaplex\n```bash\nnpx ts-node ./metaplex/js/packages/cli/src/candy-machine-v2-cli.ts verify_upload \\\n    --env devnet --keypair ./key.json\n```\n```bash\nwallet public key: GRbqKQ332wWMsFU43N3VSY9EhhPsNKZh3sszhXdsQSR3\nKey size 10\nLooking at key  0\nLooking at key  1\nLooking at key  2\nLooking at key  3\nLooking at key  4\nLooking at key  5\nLooking at key  6\nLooking at key  7\nLooking at key  8\nLooking at key  9\nuploaded (10) out of (10)\nready to deploy!\n```\n\n#### 8.6 Confirm the images have been uploaded to [nft.storage](https://nft.storage/files/)\n\n![nft.storage](./storage.png)\n\n#### 8.7 Mint one token using Metaplex\n```bash\nnpx ts-node ./metaplex/js/packages/cli/src/candy-machine-v2-cli.ts mint_one_token \\\n    --env devnet --keypair ./key.json\n```\n```bash\nmint_one_token finished 2oy2UeJ7ajuSTdDRCGGfewo2LfYtdNfm1Pyhm4WrTWyGY2TK8hrCYkTJ9eL3sbMd3FhQrvmVjXrRgunhCpYwiv6C\n```\n\n#### 8.9 Mint multiple tokens\n```bash\nnpx ts-node ./metaplex/js/packages/cli/src/candy-machine-v2-cli.ts mint_one_token \\\n    --env devnet --keypair ./key.json\n```\n```bash\nmint_one_token finished 2oy2UeJ7ajuSTdDRCGGfewo2LfYtdNfm1Pyhm4WrTWyGY2TK8hrCYkTJ9eL3sbMd3FhQrvmVjXrRgunhCpYwiv6C\n```\n\n#### 8.10 Checking your balance \n```bash\nspl-token accounts --owner ./key.json\n```\n```bash\nToken                                         Balance\n---------------------------------------------------------------\n57LrgeQk19vkfQcwt9i4kcazHEpdW8P7PVxwqXLfmJr3  1      \n5cZqJmAhnuQQKBmvDousYTDzpAeM9KdPQTyVoJL4byEe  10     \n8kjeYR9e5R8D1DjZjsRtVktCK7xkbGytqxgwXn842dyB  9      \nAqoJM91CTkXXhyx8qi5HJZGPaozRHc33zSyXz1EnTnWn  1000000\nC9r7VaDTBrgm8vPFB7BCjEVhXD3kW5vRT2PEgezdyjNQ  220300 \nCNwdEBCLHJN5sUDwydDMjJdKmNA88KSi16N4pFuxbsNL  0      \nDEpBz1FB1Jg4JiWU331vpu7kDuTnPiypvhGFWhz19yXB  1      \nFoxTkih1Tb3emCVV65V7G3avbCk7UrKgpJzrGfgLTw8e  1      \ng291tKH38BBYXQWeKMrkPCXu1LshymdETbN4u6BeSns   1      \n```\n\n#### 8.11 Open the Candy Machine output on the Solana explorer\n\n- [mainet](https://explorer.solana.com/address/8vjuNEaUwjJJTRcGg66yywYbBJUu3ipNRYvPRULwkxri)\n- [devnet](https://explorer.solana.com/address/8vjuNEaUwjJJTRcGg66yywYbBJUu3ipNRYvPRULwkxri?cluster=devnet)\n\n![candy1.png](./candy1.png)\n![candy2.png](./candy2.png)\n\n#### 8.12 Check the NFT metadata\n![Token8.png](./token8.png)\n![Token metadata.png](./token_metadata.png)\n```bash\n{\n  \"key\": 4,\n  \"updateAuthority\": \"GRbqKQ332wWMsFU43N3VSY9EhhPsNKZh3sszhXdsQSR3\",\n  \"mint\": \"g291tKH38BBYXQWeKMrkPCXu1LshymdETbN4u6BeSns\",\n  \"data\": {\n    \"name\": \"Number #0008\",\n    \"symbol\": \"NISMAN\",\n    \"uri\": \"https://bafkreiamuicmrmmb5cti4sv5aftzo26qcrltezkbhaxrbytlww3tkr66t4.ipfs.dweb.link\",\n    \"sellerFeeBasisPoints\": 0,\n    \"creators\": [\n      {\n        \"address\": \"DyiNkgy7xRPsg5iM8zrZziCX2wmq3E4mhMfdAHJfNzSU\",\n        \"verified\": 1,\n        \"share\": 0\n      },\n      {\n        \"address\": \"GRbqKQ332wWMsFU43N3VSY9EhhPsNKZh3sszhXdsQSR3\",\n        \"verified\": 0,\n        \"share\": 100\n      }\n    ]\n  },\n  \"primarySaleHappened\": 1,\n  \"isMutable\": 0,\n  \"editionNonce\": 253\n}\n```\n\n#### 8.13 Trying to create an account for the token fails because it is handled by Candy Machine\n```bash\nspl-token create-account g291tKH38BBYXQWeKMrkPCXu1LshymdETbN4u6BeSns --owner key.json\n```\n```bash\nCreating account DYc1kfPiCp6qsVk7jbTrEuKcBmDYPFtYjsWaZqPbPxoz\nError: Account already exists: DYc1kfPiCp6qsVk7jbTrEuKcBmDYPFtYjsWaZqPbPxoz\n```\n\n#### 9 Listing the Token\n\n#### 9.1 Clone the the [Token List](https://github.com/solana-labs/token-list) repository\n```bash\ngit clone https://github.com/solana-labs/token-list\ncd token-list/\n```\n\n#### 9.2 Add the media to the logos directory\n```bash\nmkdir assets/mainnet/AqoJM91CTkXXhyx8qi5HJZGPaozRHc33zSyXz1EnTnWn/\ncp ~/Downloads/logo.png assets/mainnet/AqoJM91CTkXXhyx8qi5HJZGPaozRHc33zSyXz1EnTnWn/logo.png\ngit add assets/mainnet/AqoJM91CTkXXhyx8qi5HJZGPaozRHc33zSyXz1EnTnWn/logo.png\n```\n\n#### 9.3 Add your token to the token list\nTo add a new token, add another json block to the large tokens list in `src/tokens/solana.tokenlist.json` and submit a PR.\n```bash\nvim src/tokens/solana.tokenlist.json \n```\n```bash\n    {\n      \"chainId\": 101,\n      \"address\": \"AqoJM91CTkXXhyx8qi5HJZGPaozRHc33zSyXz1EnTnWn\",\n      \"symbol\": \"NISMAN\",\n      \"name\": \"Nisman Coin\",\n      \"decimals\": 10,\n      \"logoURI\": \"https://github.com/MartinCastroAlvarez/ethereum-solidity-contract/raw/main/logo.png\",      \"tags\": [\n        \"solana\"\n      ],\n      \"extensions\": {\n        \"website\": \"https://github.com/MartinCastroAlvarez/ethereum-solidity-contract\"\n      }\n    },\n```\n\n#### 9.4 Commit your changes and submit a pull request.\n```bash\ngit commit -a -m 'Adding MP token'\ngit checkout -b MartinCastroAlvarezNisman\ngit push origin MartinCastroAlvarezNisman\n```\n\n#### 10 Transferring tokens\n\n#### 10.1 Create another wallet \n```bash\nsolana-keygen new --outfile other.json\n```\n```bash\nGenerating a new keypair\nFor added security, enter a BIP39 passphrase\nNOTE! This passphrase improves security of the recovery seed phrase NOT the\nkeypair file itself, which is stored as insecure plain text\nBIP39 Passphrase (empty for none): \nEnter same passphrase again: \nWrote new keypair to other.json\n================================================================================\npubkey: AxHmduv298YFHUi6eTRhoXAWVdmEsRD4i44Ce9kD8ipv\n================================================================================\nSave this seed phrase and your BIP39 passphrase to recover your new keypair:\nduring wheat disorder pepper maple wise number together laptop poet narrow trend\n================================================================================\n```\n\n#### 10.2 Retrieve the private key from the json file\n```bash\ncat other.json\n```\n```bash\n[53,55,82,181,90,137,126,208,219,71,54,77,119,145,77,88,5,103,208,217,10,218,187,210,47,131,48,215,123,226,223,110,147,227,22,153,66,69,41,186,253,0,224,158,116,81,90,102,12,218,125,243,30,144,25,89,122,152,197,55,190,90,78,215]\n```\n\n#### 10.3 Add SOL to your wallet on devnet\n```bash\nsolana airdrop 1 AxHmduv298YFHUi6eTRhoXAWVdmEsRD4i44Ce9kD8ipv\n```\n```bash\nSignature: 32Gk4dp9YZ4jrx8rdvUUisyJWi9cNSppNW3c6EEmcizvryEQ69GjEBBE9u4nTXy1bjUBwgjBZpU7sZ9uQSADmt9C\n```\n\n#### 10.4 Fetching the wallet info\n```bash\nsolana account AxHmduv298YFHUi6eTRhoXAWVdmEsRD4i44Ce9kD8ipv\n```\n```bash\nPublic Key: AxHmduv298YFHUi6eTRhoXAWVdmEsRD4i44Ce9kD8ipv\nBalance: 1 SOL\nOwner: 11111111111111111111111111111111\nExecutable: false\nRent Epoch: 270\n```\n\n#### 10.5 Create an account for the other account\n```bash\nspl-token create-account g291tKH38BBYXQWeKMrkPCXu1LshymdETbN4u6BeSns --owner other.json\n```\n```bash\nCreating account H16QimPvJ5GBc7eXzp4S2RxvsWqEypfZRDodwDY1vmRR\nSignature: 61tgcMu6pJHDubGUQ2NsVQVrf1AhnrLVCxiJ9DijjLiMHBdJoUi7jpyLZXDM1Rkmkv7cQpQJRXr3g4DsE4Ps6DLW\n```\n\n#### 10.6 Transfer a release into the new account\n```bash\nspl-token transfer g291tKH38BBYXQWeKMrkPCXu1LshymdETbN4u6BeSns 1 H16QimPvJ5GBc7eXzp4S2RxvsWqEypfZRDodwDY1vmRR --owner ./key.json\n```\n```bash\nTransfer 1 tokens\n  Sender: DYc1kfPiCp6qsVk7jbTrEuKcBmDYPFtYjsWaZqPbPxoz\n  Recipient: H16QimPvJ5GBc7eXzp4S2RxvsWqEypfZRDodwDY1vmRR\nSignature: 2BU6SgoxEdBKagiTtKRNDrQZ18Nf1UfJaJWVkCJFC8UzLmqzzXEgDCZuZgDfphZgrW7m3D4o2iz21cN3T2vGCrmd\n```\n\n#### 10.7 Check the new balance\n```bash\nspl-token balance g291tKH38BBYXQWeKMrkPCXu1LshymdETbN4u6BeSns --owner GRbqKQ332wWMsFU43N3VSY9EhhPsNKZh3sszhXdsQSR3\n```\n```bash\n0\n```\n```bash\nspl-token balance g291tKH38BBYXQWeKMrkPCXu1LshymdETbN4u6BeSns --owner AxHmduv298YFHUi6eTRhoXAWVdmEsRD4i44Ce9kD8ipv\n```\n```bash\n1\n```\n\n#### 10.8 Allow another account to transfer the NFT on your behalf\n```bash\nspl-token approve H16QimPvJ5GBc7eXzp4S2RxvsWqEypfZRDodwDY1vmRR 1 GRbqKQ332wWMsFU43N3VSY9EhhPsNKZh3sszhXdsQSR3 --owner other.json\n```\n```bash\nApprove 1 tokens\n  Account: H16QimPvJ5GBc7eXzp4S2RxvsWqEypfZRDodwDY1vmRR\n  Delegate: GRbqKQ332wWMsFU43N3VSY9EhhPsNKZh3sszhXdsQSR3\nSignature: JF7N61Gu6DqAcan6vYhZN1ezCQRHkPRkyTjc2JutS72pSxM3ymuh4PNbf8P5q662hc7QPHrBvT8ZF6ksVsAvSG9\n```\n\n#### 10.9 Use your approval to transfer the NFT on behalf of the other account\n```bash\nspl-token transfer g291tKH38BBYXQWeKMrkPCXu1LshymdETbN4u6BeSns 1 GRbqKQ332wWMsFU43N3VSY9EhhPsNKZh3sszhXdsQSR3 --owner key.json --from H16QimPvJ5GBc7eXzp4S2RxvsWqEypfZRDodwDY1vmRR\n```\n```bash\nTransfer 1 tokens\n  Sender: H16QimPvJ5GBc7eXzp4S2RxvsWqEypfZRDodwDY1vmRR\n  Recipient: GRbqKQ332wWMsFU43N3VSY9EhhPsNKZh3sszhXdsQSR3\n  Recipient associated token account: DYc1kfPiCp6qsVk7jbTrEuKcBmDYPFtYjsWaZqPbPxoz\nSignature: 4AHAyKDfqWp4gk9jJTKx8ctqJWxLjL87Z5bG1eNHzAbQVAWqbYNN3Cqytj6rJmPma4aJd7aR7EcmgdhaiKUA6g2M\n```\n\n#### 10.10 Check the balance of the sender\n```bash\nspl-token balance g291tKH38BBYXQWeKMrkPCXu1LshymdETbN4u6BeSns --owner GRbqKQ332wWMsFU43N3VSY9EhhPsNKZh3sszhXdsQSR3\n```\n```bash\n0\n```\n```bash\nspl-token balance g291tKH38BBYXQWeKMrkPCXu1LshymdETbN4u6BeSns --owner AxHmduv298YFHUi6eTRhoXAWVdmEsRD4i44Ce9kD8ipv\n```\n```bash\n1\n```\n\n#### 10.11 Check the latest transactions associated with the token\n```bash\nsolana transaction-history g291tKH38BBYXQWeKMrkPCXu1LshymdETbN4u6BeSns\n```\n```bash\n2BU6SgoxEdBKagiTtKRNDrQZ18Nf1UfJaJWVkCJFC8UzLmqzzXEgDCZuZgDfphZgrW7m3D4o2iz21cN3T2vGCrmd\n61tgcMu6pJHDubGUQ2NsVQVrf1AhnrLVCxiJ9DijjLiMHBdJoUi7jpyLZXDM1Rkmkv7cQpQJRXr3g4DsE4Ps6DLW\n4qui7MS7TH4fqnEXn8DnhWohvnpoohoogyrMmWC8a5GtrdvSAN22Y3uGQtLEGVutPEUHLtH4oyzzbrAV8rr14Bfd\n3 transactions found\n```\n\n#### 10.12 Check the latest transactions associated with the receiver\n```bash\nsolana transaction-history AxHmduv298YFHUi6eTRhoXAWVdmEsRD4i44Ce9kD8ipv\n```\n```bash\n61tgcMu6pJHDubGUQ2NsVQVrf1AhnrLVCxiJ9DijjLiMHBdJoUi7jpyLZXDM1Rkmkv7cQpQJRXr3g4DsE4Ps6DLW\ngA14iUUjZvxMmnZEpab61Zixb1XUqghzFx2FAjn3BHkbbP4U8Y99oZsgp443cJAxn73PLwbR7xE1kNEuvmGGYRt\n5eGabQattEckgeZsMdTJMyAJ51iZc853wu3x2VWyeH8j7Tycf51M1R6JH36qvWWPEjXJXuZqQ2YG842zVNjzrrVM\nU2yxzLAx57NYA4fYNq7QY5GG2aV15qCWjNHUAh2cbM2DozjbHJzpFoxA6KBYr6XX3hRMpjj9L6n6pubi7hGEPgd\n4HkrBdeYcQTA6ZEC14rkKyQYMUoF2UgBc5Foa3xP7Q8PZCWg7eVhUVZaA4cz8M1Y5ZGQX1VJSm2J5KTb522hR5sA\n2Q2mKdjvMFfXuDuvwbwY4X7mZEJaUTKcwjXzAnarX2Q5PxbTYKmi2DsEdrFtYJZ2ARDvSrXLnWAC4hPg7o4Gcjnb\n2Jwve2yM79EguUzoEg8TptomsgGaWLEJTy5uEbyB3q3cuADJZ2gYAFYSntZ8CE9TCDBGy9Ga151nKcRKFddFsmow\n2csLCiSNxJEizfxsFEDVYwaHRB69jkxEk2ZjWHfnvDu8DppR3DJ3YZ1F6zNjbAGWWc7ER8oau4pxjzJUZxCqH4a2\n6mZPD17kUyk1W5ZssNZ8bezPedznGKE5dfCPyeRgWbYm4ejQoNsjA1XUGotPFTaPNfnyNSCim3FsioMwYXLVCsY\n5xjn4CAKryxJnA1dMZwonpQzvwsCegGj7hCt8iXbWB4ifuZ3hFKPd2j2GvcE1fVHPHbmJCaNhr3GJHxscYBYCTvq\nUhR64tVJzEWPvAsVJJCnAKV7nSgc7ZMrPGyt28sYEKv26hGhjp8j7jK4wDAcif5BEKx5HvApSA6HdE4sqTGyfD3\n11 transactions found\n```\n\n## 11 Rust Development\n\n### 11.1 Hello World Example\n\n#### 11.1.1 Create a new project\n```bash\ncargo new hello\ncd hello\n```\n```bash\nCreated binary (application) `hello` package\n```\n\n#### 11.1.2 Edit the [Cargo.toml](./hello/Cargo.toml) manifest file\n```bash\n[package]\nname = \"hello\"\nversion = \"0.1.0\"\nedition = \"2021\"\n[dependencies]\n```\n\n#### 11.1.3 Edit the [main.rs](./hello/src/main.rs) program file\n```rust\nfn main() {\n    println!(\"Hello, world!\");\n}\n```\n\n#### 11.1.4 Compile and run the program\n```bash\ncargo run\n```\n```bash\nCompiling hello v0.1.0 (/home/martinalejandrocastroalvarez/contract/hello)\nFinished dev [unoptimized + debuginfo] target(s) in 1.50s\n    Running `target/debug/hello\nHello, world!\n```\n\n### 11.2 Arguments Example\n\n#### 11.2.1 Create a new project\n```bash\ncargo new args\ncd args\n```\n```bash\nCreated binary (application) `args` package\n```\n\n#### 11.2.2 Edit the [Cargo.toml](./args/Cargo.toml) manifest file\n```bash\n[package]\nname = \"args\"\nversion = \"0.1.0\"\nedition = \"2021\"\n[dependencies]\n```\n\n#### 11.2.3 Edit the [main.rs](./args/src/main.rs) program file\n```rust\nuse std::env::{args, Args};\nfn main() {\n    let mut args: Args = args();\n    let first: String = args.nth(1).unwrap();\n    let second: String = args.nth(0).unwrap();\n    let third: String = args.nth(0).unwrap();\n    println!(\"Hello, {:?} {:?} {:?}!\", first, second, third);\n}\n```\n\n#### 11.2.4 Compile and run the program\n```bash\ncargo run -- lorem ipsum dolor\n```\n```bash\n    Finished dev [unoptimized + debuginfo] target(s) in 0.00s\n     Running `target/debug/nisman lorem ipsum dolor`\nHello, \"lorem\" \"ipsum\" \"dolor\"!\n```\n\n### 11.3 Art Example\n\n#### 11.3.1 Create a new project\n```bash\ncargo new art\ncd art\n```\n```bash\nCreated binary (application) `art` package\n```\n\n#### 11.3.2 Edit the [Cargo.toml](./art/Cargo.toml) manifest file\n```bash\n[package]\nname = \"art\"\nversion = \"0.1.0\"\nedition = \"2021\"\n[dependencies]\n```\n\n#### 11.3.3 Edit the [data.rs](./art/src/data.rs) program file which contains the Structs\n```rust\n#[derive(Debug, Clone)]\npub struct Person {\n    pub name: String,\n    pub phone: u32 \n}\n\n#[derive(Debug, Clone)]\npub enum Category {\n    Image,\n    Video\n}\n\n#[derive(Debug, Clone)]\npub struct Art {\n    pub name: String,\n    pub price: u64,\n    pub owner: Person,\n    pub creator: Person\n}\n\nimpl Art {\n    pub fn get_price(\u0026self) -\u003e u64 {\n        self.price\n    }\n}\n```\n\n#### 11.3.4 Edit the [main.rs](./art/src/main.rs) program file\n```rust\nmod data;\nuse data::Art;\nuse data::Person;\nuse data::Category;\n\nfn main() {\n    let image: Art = Art {\n        name: String::from(\"Dolor\"),\n        price: 128319823.try_into().unwrap(),\n        creator: Person {\n            name: String::from(\"Lorem\"),\n            phone: 123125.try_into().unwrap()\n        },\n        owner: Person {\n            name: String::from(\"Ipsum\"),\n            phone: 58332394.try_into().unwrap()\n        },\n        category: Category::Image\n    };\n    let video: Art = Art {\n        name: String::from(\"Dolor\"),\n        price: 128319823.try_into().unwrap(),\n        creator: Person {\n            name: String::from(\"Lorem\"),\n            phone: 123125.try_into().unwrap()\n        },\n        owner: Person {\n            name: String::from(\"Ipsum\"),\n            phone: 58332394.try_into().unwrap()\n        },\n        category: Category::Video\n    };\n    println!(\"Image: {:?}\", image);\n    println!(\"Video: {:?}\", video);\n    println!(\"Image Price: {:?}\", video.get_price());\n    println!(\"Video Price: {:?}\", image.get_price());\n}\n```\n\n#### 11.4.5 Compile and run the program\n```bash\ncargo run -- lorem ipsum dolor\n```\n```bash\n   Compiling art v0.1.0 (/home/martinalejandrocastroalvarez/contract/art)\n    Finished dev [unoptimized + debuginfo] target(s) in 0.27s\n     Running `target/debug/art`\nImage: Art { name: \"Dolor\", price: 128319823, owner: Person { name: \"Ipsum\", phone: 58332394 }, creator: Person { name: \"Lorem\", phone: 123125 }, category: Image }\nVideo: Art { name: \"Dolor\", price: 128319823, owner: Person { name: \"Ipsum\", phone: 58332394 }, creator: Person { name: \"Lorem\", phone: 123125 }, category: Video }\nImage Price: 128319823\nVideo Price: 128319823\n```\n\n## 12 Deploying a Program\n\n#### 12.1 Create a new project\n```bash\ncargo new contract\ncd contract\n```\n```bash\nCreated binary (application) `contract` package\n```\n\n#### 12.2 Edit the [Cargo.toml](./contract/Cargo.toml) manifest file\n\n#### 12.3 Edit the [main.rs](./contract/src/main.rs) program file\n\n#### 12.4 Creating a release\n```bash\ncargo build --release\n```\n```bash\nFinished release [optimized] target(s) in 2m 40s\n```\n\n#### 12.5 After building the release, compile for Solana\n```bash\nrustc ./src/main.rs \n./main\n```\n```bash\nTODO\n```\n\n## 13 Approvals\n\n#### 13.1 Creating a token account\n```\nspl-token create-account AqoJM91CTkXXhyx8qi5HJZGPaozRHc33zSyXz1EnTnWn --owner ./other.json\n```\n```\nAccount: 9SiGoPXKt5K7gjFCMQa9w3YdbLDbPSme7XFAVywwHmeD\n```\n\n#### 13.2 Trasnferring some tokens\n```\nspl-token transfer AqoJM91CTkXXhyx8qi5HJZGPaozRHc33zSyXz1EnTnWn 100 9SiGoPXKt5K7gjFCMQa9w3YdbLDbPSme7XFAVywwHmeD --owner ./key.json\n```\n```\nSignature: 59GeZ6yvnGJakjPeoJ3LeGQJKvZ3FsoD5QgSXAMdzvTEu8f21SbD9NKZ8vm6LPQn1Bzd7HqAcrNxnUArN8kyFR4q\n```\n\n#### 13.3 Approving 10 tokens\n```\nspl-token approve 9SiGoPXKt5K7gjFCMQa9w3YdbLDbPSme7XFAVywwHmeD 10 GRbqKQ332wWMsFU43N3VSY9EhhPsNKZh3sszhXdsQSR3 --owner other.json\n```\n```\nSignature: 59GeZ6yvnGJakjPeoJ3LeGQJKvZ3FsoD5QgSXAMdzvTEu8f21SbD9NKZ8vm6LPQn1Bzd7HqAcrNxnUArN8kyFR4q\n```\n\n#### 13.4 Transferring those tokens\n```\nspl-token transfer AqoJM91CTkXXhyx8qi5HJZGPaozRHc33zSyXz1EnTnWn 9 GRbqKQ332wWMsFU43N3VSY9EhhPsNKZh3sszhXdsQSR3 --owner key.json --from 9SiGoPXKt5K7gjFCMQa9w3YdbLDbPSme7XFAVywwHmeD\n```\n```\nSignature: 59GeZ6yvnGJakjPeoJ3LeGQJKvZ3FsoD5QgSXAMdzvTEu8f21SbD9NKZ8vm6LPQn1Bzd7HqAcrNxnUArN8kyFR4q\n```\n\n#### 13.5 Transferring more tokens than approved causes an error\n```\nspl-token transfer AqoJM91CTkXXhyx8qi5HJZGPaozRHc33zSyXz1EnTnWn 2 GRbqKQ332wWMsFU43N3VSY9EhhPsNKZh3sszhXdsQSR3 --owner key.json --from 9SiGoPXKt5K7gjFCMQa9w3YdbLDbPSme7XFAVywwHmeD\n```\n```\nSignature: 59GeZ6yvnGJakjPeoJ3LeGQJKvZ3FsoD5QgSXAMdzvTEu8f21SbD9NKZ8vm6LPQn1Bzd7HqAcrNxnUArN8kyFR4q\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartincastroalvarez%2Fsolana-token-rust","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmartincastroalvarez%2Fsolana-token-rust","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartincastroalvarez%2Fsolana-token-rust/lists"}