Armazenamento de Conta

Em Cadence, as contas (que possuem um endereço) podem armazenar e possuir seus próprios dados. Em quase todos os casos, você armazena recursos em sua conta.

Para fazer isso, você precisa de acesso a um AuthAccount, um tipo que está disponível apenas na etapa prepare de uma transação.

Os dados são armazenados em “storage paths”. Você usa a função save para armazenar dados, load para retirá-los do armazenamento e borrow para obter uma referência a eles.

cadence
		
			// Contract file: Test.cdc
// Deployed to 0x01
pub contract Test {

   pub resource NFT {
      pub let id: UInt64
      pub let rarity: String
      pub var name: String
      
      init(rarity: String, name: String) {
         self.id = self.uuid
         self.rarity = rarity
         self.name = name
      }
   }

   pub fun createNFT(rarity: String, name: String): @NFT {
      let nft <- create NFT(rarity: rarity, name: name)
      return <- nft
   }

}
		 
	
cadence
		
			// Transaction file: store_nft.cdc
import Test from 0x01

transaction(rarity: String, name: String) {

   prepare(signer: AuthAccount) {
      let nft <- Test.createNFT(rarity: rarity, name: name)
      // moves the NFT resource into storage at `/storage/MyNFT`
      signer.save(<- nft, to: /storage/MyNFT)

      /*
       trying to store an asset there again would cause an error,
       because only one thing can be stored at a path at a time

       let nft2 <- Test.createNFT(rarity: rarity, name: name)
       signer.save(<- nft2, to: /storage/MyNFT)
      */
   }

   execute {
      
   }
}
		 
	
cadence
		
			// Transaction file: borrow_nft.cdc
import Test from 0x01

transaction() {

   prepare(signer: AuthAccount) {
      let nft: &Test.NFT? = signer.borrow<&Test.NFT>(from: /storage/MyNFT)
      log(nft!.name)
   }

   execute {
      
   }
}
		 
	
cadence
		
			// Transaction file: destroy_nft.cdc
import Test from 0x01

transaction() {

   prepare(signer: AuthAccount) {
      let nft <- signer.load<@Test.NFT>(from: /storage/MyNFT)
      destroy nft
   }

   execute {
      
   }
}