Transfer Function

The transfer function is likely the most important endpoint, as it handles token transfers between two wallets. Similar to the Drop endpoint, we must carefully manage the order of execution to ensure optimal performance.

Transfer: function (to, amount) {
        
       // tests the transfer amount
       if(amount<=0) 
       {
         print("Inproper amount\n");
         return false;
       }
      
       // Createa a new wallet instance
        var From = Object.create(CRC_Wallet); 
      
        // Opens the Sender's wallet
        From.OpenWallet(msg.From);
      
        // If there are enough tokens and the amount is positive
        if (From.Balance >= amount) {
            
            // Create a new wallet instance 
            var To = Object.create(CRC_Wallet); 
          
            // Opens the recipient's wallet
            if(To.OpenWallet(to)){
              
                // Transfers the tokens
                From.Balance -= amount;
                To.Balance   += amount;
              
                //Prints out the message 
                println('Transfered : ' + amount + ', To : "' + To.Address );
              
                // Saves the wallets
                From.CloseWallet();
                To.CloseWallet();
              
                return true;
            } else {
              
                // Invalid Recipient Address
                print("Invalid Recipient\n");
              
                return false;    
            }
        }
      
        print("Transfer failed\n");
      
        return false;
    },

Similar to the “Drop” function, the “Transfer” function requires a strategic sequence of operations for efficiency.

First, we check if the transfer amount is greater than zero, avoiding unnecessary wallet access otherwise. We open the sender’s wallet and verify that the balance covers the transfer amount. Once confirmed, we open the recipient’s wallet, ensuring it’s successful.

The transfer is executed by deducting tokens from the sender and crediting the recipient. A message is logged before updating both wallets.

With the transfer function complete, our token is ready for deployment. We’ll now explore common smart contract templates to ensure a smooth start in Circular Protocol development.​

Last updated