token.sol 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import '../../solana-library/spl_token.sol';
  2. contract Token {
  3. address mint;
  4. function set_mint(address _mint) public {
  5. mint = _mint;
  6. }
  7. @account(mint)
  8. function total_supply() external view returns (uint64) {
  9. assert(tx.accounts.mint.key == mint);
  10. return SplToken.total_supply(tx.accounts.mint);
  11. }
  12. @account(account)
  13. function get_balance() external view returns (uint64) {
  14. return SplToken.get_balance(tx.accounts.account);
  15. }
  16. @mutableAccount(mint)
  17. @mutableAccount(account)
  18. @signer(authority)
  19. function mint_to(uint64 amount) external {
  20. assert(tx.accounts.mint.key == mint);
  21. SplToken.mint_to(
  22. tx.accounts.mint.key,
  23. tx.accounts.account.key,
  24. tx.accounts.authority.key,
  25. amount);
  26. }
  27. @mutableAccount(from)
  28. @mutableAccount(to)
  29. @signer(owner)
  30. function transfer(uint64 amount) external {
  31. SplToken.transfer(
  32. tx.accounts.from.key,
  33. tx.accounts.to.key,
  34. tx.accounts.owner.key,
  35. amount);
  36. }
  37. @mutableAccount(account)
  38. @mutableAccount(mint)
  39. @signer(owner)
  40. function burn(uint64 amount) external {
  41. SplToken.burn(
  42. tx.accounts.account.key,
  43. tx.accounts.mint.key,
  44. tx.accounts.owner.key,
  45. amount);
  46. }
  47. }