Airdrop

Airdrop

[!NOTE] These airdrops are specific to a contract that does airdrops.


Claim Airdrop

Commands

UTXO_RECEIVER_1 is the UTXO the airdrop will be bound to.

Single Airdrop

<TXID, 
	{CONTRACT_ID_1:AIRDROP[
        UTXO_RECEIVER_1]}>

Batched Airdrop

<TXID, 
	{CONTRACT_ID_1:AIRDROP[
        UTXO_RECEIVER_1]},
	{CONTRACT_ID_2:AIRDROP[
        UTXO_RECEIVER_1]},
	...,
	{CONTRACT_ID_N:AIRDROP[
        UTXO_RECEIVER_1]}>

Examples

Single Airdrop

<04affa741549ea4f9f2f331a36f83906b558862bf2e70bef833ef1f8e14bc3f2,
    {d4ef02ac55ac30b973caf8e468028734a71665f931e95295fcd02d07b287cd00:AIRDROP[
        TXID:0]}>

Batched Airdrop

<410cf1c90521ccb0dcae689d4c4f0465410a29e4cd00ac05c27696b08b8bbef3,
    {d4ef02ac55ac30b973caf8e468028734a71665f931e95295fcd02d07b287cd00:AIRDROP[
        TXID:0]},
    {6a6787f011052aca7955a2c3c90e836f94f80d0918ba5b9b57e85ec3676857d7:AIRDROP[
        TXID:1]},
    {edd71b97449e993e07bcc451fd0bf76c90d9b7ac0a031930ed2a79fef5cd4a22:AIRDROP[
        TXID:2]},
    {05874c81d5f3b83880d112178d09dbe2845148d256d4183936229547d8497505:AIRDROP[
        TXID:3]},
    {eca67b99f1a32f1be4ca66bfb38d453aed73e660b805256fd98a303fd69e50fe:AIRDROP[
        TXID:4]},
    {021725919e91ee5422a9fd7f3e21c88e7abe802978e9584abd817244a5a11560:AIRDROP[
        TXID:5]},
    {0eebc6baa4463e8f0f9f8cf31440ed12e9f312671b334de97e338380ee1f5cc1:AIRDROP[
        TXID:6]},
    {84ca055f9c7aa69d63241d3853b0dc701feeaba4def4acb8d2db5358dfc9cdf0:AIRDROP[
        TXID:7]},
    {38d40dfbcc39069c5b9dd7225ecfa9ef2140ebd2dca962328c30f922d74f776e:AIRDROP[
        TXID:8]},
    {c0e011fd493874be949e801363df02b59c345a599710d0d8c76db91975c33ad1:AIRDROP[
        TXID:9]},
    {cd0c4866d59e422d2e34b5e9653020b35752c5ae649c0907c02732b7e02e214e:AIRDROP[
        TXID:10]},
    {4571c9572ed3500b9fe680a504dfb6c32397221427eefd5d8337ab5fe7087aab:AIRDROP[
        TXID:11]},
    {b7e8d09296164c1b8cc641902f18b4535211e18426c0ca20ddcbfaf1a250c70c:AIRDROP[
        TXID:12]},
    {d4b57d034b5c5093860385b36a14334649768fad07a039930bd1860d14a63da0:AIRDROP[
        TXID:13]},
    {8d3c6ef59956d6205cb61666500797e3c9876388f68002b613094ded7f83bfb2:AIRDROP[
        TXID:14]},
    {78be7725c4afa49c07e121b54c3691094e0dbd07bbf63f4f6cb6bd913c42be73:AIRDROP[
        TXID:15]},
    {bcf68a4029f4b58edce3678883b692d1fcbf0da2866a3ce5451e355cd7f098d2:AIRDROP[
        TXID:16]},
    {d376e2c28288642deb311cd445b0ed3f6a6813e0377b0de8814a4aaf2e0025ba:AIRDROP[
        TXID:17]},
    {75f0d0ab533400eaf9f96d2c417073f71d77d775bfd1b7929bdcea897f08c88e:AIRDROP[
        TXID:18]},
    {676a24bed8a03c8ec0a6124c183012c4eceb896d0600ddf7609f7030f57a56df:AIRDROP[
        TXID:19]},
    {ce6bf8edf41f43cc3676c0f431aa07db45cf8d4efb1ec0d5c785e092400cca85:AIRDROP[
        TXID:20]},
    {166bdeea01c49f6eeef2e65b4770afb79a2e5dc8617b9e087fe31c19c1029635:AIRDROP[
        TXID:21]},
    {3adfaad7f2e137974df201bd1f83272e834b484b77178bce5ef1a957ea0dd171:AIRDROP[
        TXID:22]},
    {50b7fc619f858f5bf7d12b392a2b26489ef11d4d62c3d182d0754f3df9bbebf4:AIRDROP[
        TXID:23]},
    {65d61c39c2516beb16e61c782009bf59c64ee45321b4056336ee435f9f25dfe9:AIRDROP[
        TXID:24]},
    {db719fdf3009f68daff1b4b8a0f3f698dde602c9ef73e8292afe8f71f0c46c8d:AIRDROP[
        TXID:25]}>

Implementations

Rust

pub fn airdop(&mut self, txid: &String, payload: &String, receiver: &String, pending: bool) -> Result<u64, String> {
    let current_airdrops = match self.current_airdrops.clone() {
        Some(current_airdrops) => current_airdrops,
        None =>  return  Err("airdop: no airdrops".to_string()),
    };

    let airdrop_amount = match self.airdrop_amount.clone() {
        Some(airdrop_amount) => airdrop_amount,
        None =>  return  Err("airdop: no airdrops".to_string()),
    };

    let total_airdrops = match self.total_airdrops.clone() {
        Some(total_airdrops) => total_airdrops,
        None =>  return  Err("airdop: no airdrops".to_string()),
    };

    if current_airdrops >= total_airdrops {
        return Err("airdop: contract has reached max supply".to_string());
    }

    let mut owner_amount = airdrop_amount;

    if current_airdrops + 1 == total_airdrops {
        let mut last_airdrop_split = match self.last_airdrop_split.clone() {
            Some(last_airdrop_split) => last_airdrop_split,
            None =>  Vec::new()
        };

        last_airdrop_split.push(receiver.to_string());
        self.last_airdrop_split = Some(last_airdrop_split);
        self.payloads.insert(txid.to_string(), payload.to_string());
        return Ok(owner_amount);
    }

    let mut p_c = match self.pending_claims.clone() {
            Some(p_c) => p_c,
            None => HashMap::new(),
    };

    if pending {
       p_c.insert(receiver.to_string(), airdrop_amount);
       if let Some(owned) = self.owners.get(receiver){
            owner_amount += owned;    
       }
    } else {
        p_c.remove(receiver);
        match self.owners.get(receiver) {
            Some(&e) => {
                self.owners.insert(receiver.to_string(), &e + airdrop_amount);
                owner_amount += e;               
            }
            None => {
                self.owners.insert(receiver.to_string(), airdrop_amount);
            }
        }
    }
  
    self.current_airdrops = Some(current_airdrops + 1);
    self.pending_claims = Some(p_c);
    self.payloads.insert(txid.to_string(), payload.to_string());
    self.supply += airdrop_amount;
    return Ok(owner_amount);
}

Last updated