{"id":3628,"date":"2021-12-17T10:29:34","date_gmt":"2021-12-17T01:29:34","guid":{"rendered":"https:\/\/julialang.kr\/?p=3628"},"modified":"2021-12-21T11:35:28","modified_gmt":"2021-12-21T02:35:28","slug":"juliasolana-solana-airdrop-%ec%9e%90%eb%8f%99%ec%9c%bc%eb%a1%9c-%eb%b0%9b%ea%b8%b0","status":"publish","type":"post","link":"https:\/\/julialang.kr\/?p=3628","title":{"rendered":"[Julia,Solana] Solana Airdrop \uc790\ub3d9\uc73c\ub85c \ubc1b\uae30"},"content":{"rendered":"\n<p>Solana\ub97c \uae30\ubc18\uc73c\ub85c app\uc744 \ub9cc\ub4dc\ub294 \uacbd\uc6b0 devnet\uc774\ub098 testnet\uc5d0\uc11c \uac1c\ubc1c\uc774 \ud544\uc694\ud55c \uc774 \ub54c solana token\uc774 \ud544\uc694\ud558\ub2e4. <br>airdrop\ubc1b\uc744 \uc784\uc2dc\uc9c0\uac11\uc744 \uc0dd\uc131\ud558\uace0 \uc784\uc2dc\uc9c0\uac11\uc5d0\uc11c \ub354 \uc774\uc0c1 airdrop\uc744 \ubc1b\uc9c0 \ubabb\ud558\ub294 \uacbd\uc6b0 \uc790\uc2e0\uc758 main\uc9c0\uac12\uc73c\ub85c <br>airdrop\ubc1b\uc740 solana\ub97c \uc804\uc1a1\ud55c\ub2e4.<\/p>\n\n\n\n<p>testnet\uc774\ub098 devnet\uc758 \uacbd\uc6b0 \uc9c0\uac11 \uc8fc\uc18c\ub2f9 airdrop\ud558\ub294 \uac2f\uc218\uac00 \uc77c\uc815\uae30\uac04\ub3d9\uc548 \uc815\ud574\uc838 \uc788\ub294\ub4ef\ud558\ub2e4. <br>(\ud14c\uc2a4\ud2b8 \ud574\ubcf4\ub2c8 \ub300\ub7b5 25\uac1c \uc815\ub3c4 \uc774\uba70 1\uc77c \uc815\ub3c4 \uc9c0\ub098\uba74 \ub2e4\uc2dc \ubc1b\uc744 \uc218 \uc788\uac8c \ub418\ub294\ub4ef)<br>\uc774\ub7f0 \uc774\uc720\ub85c \uc784\uc2dc\uc9c0\uac11\uc744 \uc0dd\uc131\ud558\uc5ec airdrop\ubc1b\uace0 \ub354 \uc774\uc0c1 \ubc1b\uc9c0 \ubabb\ud558\uac70 airdrop\uc694\uccad\uc2dc \uc624\ub958\uac00 \ub098\uba74  <br>main\uc9c0\uac11\uc73c\ub85c \ubc1b\uc740 solana\ub97c \uc804\uc1a1\ud558\uace0 \uae30\uc874 \uc784\uc2dc\uc9c0\uac12\uc740 \uc0ad\uc81c\ud558\uace0 \ub2e4\uc2dc \uc0dd\uc131\ud558\uc5ec airdrop \uc744 \ubc1b\ub294\ub2e4.<\/p>\n\n\n\n<p>solana token\uc744 airdrop\ubc1b\ub294 \uac83\uc744 \uc790\ub3d9\uc73c\ub85c \ud560 \uc218 \uc788\ub294 \ud504\ub85c\uadf8\ub7a8\uc744 \uc544\ub798\uc5d0 \uacf5\uac1c\ud55c\ub2e4.<\/p>\n\n\n\n<p>0) airdrop\ubc1b\uc744 \uc784\uc2dc\uc9c0\uac11 \uc0dd\uc131.<br>1) airdrop token\uc744 \ubcf4\uc720\ud55c source\uc9c0\uac11\uc758 \uc794\uace0 \uc870\ud68c. <br>2) \uc794\uace0\uac00 1 SOL \uc774\uc0c1\uc778 \uacbd\uc6b0 airdrop\uc744 \uc694\uccad. <br>3) \uc794\uace0\uac00 1 SOL \ubbf8\ub9cc\uc778 \uacbd\uc6b0\ub294 \uc794\uace0\uac00 1SOL \uc774\uc0c1\uc774 \ub420 \ub54c \uae4c\uc9c0 \uc8fc\uae30\uc801\uc73c\ub85c \ubaa8\ub2c8\ud130\ub9c1.<br>4) airdrop\uc694\uccad\uacb0\uacfc \uc2e4\ud328\ud558\ub294 \uacbd\uc6b0 \uc9c0\uae08\uae4c\uc9c0 airdrop\ubc1b\uc740 SOL\uc744 \uc790\uc2e0\uc758 main \uc9c0\uac11\uc73c\ub85c \uc804\uc1a1.<br>5) \uc784\uc2dc\uc9c0\uac11  \uc0ad\uc81c.<br>5) airdrop\ubc1b\uc744 \uc0c8\ub85c\uc6b4 \uc784\uc2dc\uc9c0\uac11\uc0dd\uc131.<br>6) \uc124\uc815\ub41c \ucd5c\ub300 airdrop\uc744 \ubc1b\uc740 \uacbd\uc6b0 \uc77c\uc815\uae30\uac04 \ub300\uae30\uc0c1\ud0dc\ub85c \uc804\ud658(\ud0c0\uc778\uc744 \uc704\ud55c \ubc30\ub824?)<br>7) 1) \ubd80\ud130 \ub2e4\uc2dc \ubc18\ubcf5<\/p>\n\n\n\n<p>\uc544\ub798\uc11c my_account\uc758 \uac12\uc744 \ucd5c\uc885\uc801\uc73c\ub85c airdrop\ubc1b\uc740 SOL\uc744 \ubaa8\uc73c\ub294 \uc790\uc2e0\uc758 \uc9c0\uac11\uc8fc\uc18c\ub85c \uc124\uc815 \ud558\uba74\ub41c\ub2e4.<br><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Prog   : solana_airdrop.jl\n# Auth   : MrChaos\n# E-Mail : mrchaos@naver.com\n# \ubc31\uadf8\ub77c\uc6b4\ub4dc \uc2e4\ud589 : nohup julia solana_airdrop.jl > log &amp;\n\n\nusing Printf:@printf\r\nusing Dates\r\n\r\n\"Run a Cmd object, returning the stdout &amp; stderr contents plus the exit code\"\r\nfunction execute(cmd::Cmd)\r\n  out = Pipe()\r\n  err = Pipe()\r\n\r\n  process = run(pipeline(ignorestatus(cmd), stdout=out, stderr=err))\r\n  close(out.in)\r\n  close(err.in)\r\n\r\n  (\r\n    stdout = String(read(out)),\r\n    stderr = String(read(err)),\r\n    code = process.exitcode\r\n  )\r\nend\r\nfunction execute(str::String)\r\n  cmd = Cmd(Vector{String}(split(str)))\r\n  return execute(cmd)\r\nend\r\nfunction get_balance(sbal::String)\r\n    regex = r\"(&#91;0-9\\.]+&#91;\\s]).*\"\r\n    m = match(regex,sbal)\r\n    return parse(Float64,strip(m&#91;1]))\r\nend\r\n\r\nisdev =false\r\n\r\nif isdev\r\n  url = \"https:\/\/api.devnet.solana.com\"\r\n  airdrop_account = \"9B5XszUGdMaxCZ7uSQhPzdks5ZQSmWxrmzCSvtJ6Ns6g\"\r\n  amount = 2\r\n  max_amount = 10000\r\nelse\r\n  url = \"https:\/\/api.testnet.solana.com\"\r\n  airdrop_account = \"4ETf86tK7b4W72f27kNLJLgRWi9UfJjgH4koHGUXMFtn\"\r\n  amount = 1\r\n  max_amount = 2000000\r\nend\r\namount_sum = 0\r\n\r\nmy_account = \"92GHwaKBP4PnkTZur2XrW8atw5GGth7YVv9g3z9Y8akc\"\r\ntmp_key = \"tmp-account.json\"\r\ngas_fee = 0.0001\r\n\r\nwait_airdrop = 10   # airdrop \uc131\uacf5\ud6c4 \ub300\uae30 \uc2dc\uac04\r\nwait_check = 60*5  # \uc794\uace0 \ubd80\uc871 \ud6c4 \ub300\uae30 \uc2dc\uac04\r\nwait_next_max =  60*60*24  # max amount \ub2ec\uc131 \ud6c4 \ub300\uae30 \uc2dc\uac04\r\n\r\ncmd_wallet_create = \"solana-keygen new --no-passphrase -o $(tmp_key)\"\r\n\r\nif isfile(tmp_key)\r\n  code_wallet = 0\r\nelse\r\n  # \uc9c0\uac11\uc0dd\uc131\r\n  out,error,code_wallet = execute(cmd_wallet_create)\r\nend\r\n\r\nwhile true\r\n  # \uc9c0\uac11\uc0dd\uc131 \uc131\uacf5\r\n  println(string(\"-------------- \",now(),\" --------------\"))\r\n  flush(stdout)\r\n  if code_wallet == 0\r\n    # airdrop address\uc5d0\uc11c \uc794\uace0 \uc870\ud68c\r\n    out,err,code = execute(\"solana balance $(airdrop_account)  --url $(url)\")\r\n    # \uc794\uace0\uc870\ud68c \uc131\uacf5\r\n    if code == 0\r\n      # \uc794\uace0\r\n      b = get_balance(out)\r\n      @printf(\"Airdrop balance : %.10f\\n\", b)\r\n      flush(stdout)\r\n      # \uc794\uace0\uac00 1\ubcf4\ub2e4 \ud070\uacbd\uc6b0 airdrop\uc694\uccad\r\n      if b > 1\r\n        # \uc9c0\uac11\uc8fc\uc18c \uac00\uc838\uc624\uae30\r\n        out,err,code=execute(\"solana-keygen pubkey $(tmp_key)\")\r\n        if code == 0\r\n          recv_account = string(strip(out))\r\n          out,err,code = execute(\"solana airdrop $(amount) $(recv_account)  --url $(url)\")\r\n          # \uc5d0\uc5b4\ub4dc\ub78c \uc131\uacf5\r\n          if code == 0\r\n            println(\"\uc5d0\uc5b4\ub4dc\ub86d\uc131\uacf5(SUM:$(amount_sum)) ($recv_account) : $(out) SOL\")\r\n            flush(stdout)\r\n          # \uc5d0\uc5b4\ub4dc\ub78c \uc2e4\ud328\r\n          # \uc794\uace0\uac00 \uc788\ub294\ub370 \uc5d0\ub7ec\uac00 \ub098\uba74 \ucd5c\ub300\uce58\uc5d0 \ud574\ub2f9 \ud588\ub2e4\uace0 \uac00\uc815 \ud558\uace0 \uc0c8\ub85c\uc6b4 \uc8fc\uc18c\ub97c \ub9cc\ub4e4\uace0 \ub2e4\uc2dc \ud55c\ub2e4.\r\n          else\r\n            # \ud604\uc7ac \uc9c0\uac11\uc758 \uc794\uace0\uc870\ud68c\r\n            out,err,code = execute(\"solana balance $(recv_account)  --url $(url)\")\r\n            if code == 0\r\n              b = get_balance(out)\r\n              b = b - gas_fee\r\n              if b &lt;= 0\r\n                println(\"\uc804\uc1a1\uc794\uace0 \ubd80\uc871 : \",b)\r\n                flush(stdout)\r\n                sleep(wait_airdrop)\r\n                continue\r\n              end\r\n              # \uc794\uace0\uc804\uc1a1\r\n              pay = \"solana transfer --allow-unfunded-recipient --keypair $(tmp_key) --url $(url)  $(my_account) $(b)\"\r\n              out,err,code = execute(pay)\r\n              if code==0\r\n                println(\"\uc131\uacf5 : $(my_account)\ub85c $(b) SOL \uc804\uc1a1\")\r\n                flush(stdout)\r\n                global amount_sum\r\n                amount_sum = amount_sum + b\r\n                if amount_sum >= max_amount\r\n                  amount_sum = 0\r\n                  println(\"\uc7a5\uae30\uc218\uba74\")\r\n                  flush(stdout)\r\n                  sleep(wait_next_max)\r\n                end\r\n              else\r\n                println(\"\uc2e4\ud328 : $(my_account)\ub85c $(b) SOL \uc804\uc1a1\")\r\n                flush(stdout)\r\n              end\r\n              # \uae30\uc874\uc9c0\uac11\ud30c\uc77c \uc0ad\uc81c\r\n              if isfile(tmp_key)\r\n                mv(tmp_key,string(tmp_key,\".OLD\");force=true)\r\n              end\r\n              # \uc9c0\uac11\uc0dd\uc131\r\n              global code_wallet\r\n              out,err,code_wallet = execute(cmd_wallet_create)\r\n            end\r\n          end\r\n        #\uc9c0\uac11\uc8fc\uc18c \uac00\uc838\uc624\uae30 \uc2e4\ud328\r\n        else\r\n          println(\"Airdrop\ubc1b\uc744 \uc9c0\uac11\uc8fc\uc18c \uac00\uc838\uc624\uae30 \uc2e4\ud328 : $(out) : $(err)\")\r\n          flush(stdout)\r\n        end\r\n      # \uc794\uace0\uac00 1\ubcf4\ub2e4 \uc791\uc740 \uacbd\uc6b0\r\n      else\r\n        @printf(\"Airdrop\uc794\uace0\ubd80\uc871 : %.10f\\n\", b)\r\n        flush(stdout)\r\n        sleep(wait_check)\r\n      end\r\n    else\r\n      println(\"Airdrop \uc794\uace0\uc870\ud68c\uc5d0\ub7ec\")\r\n      flush(stdout)\r\n    end\r\n  else\r\n    global code_wallet\r\n    if isfile(tmp_key)\r\n      code_wallet = 0\r\n    else\r\n      # \uc9c0\uac11\uc0dd\uc131\r\n      out,error,code_wallet = execute(cmd_wallet_create)\r\n      println(\"\uc9c0\uac11\uc0dd\uc131\uc5d0\ub7ec:\",err)\r\n      flush(stdout)\r\n    end\r\n  end\r\n  flush(stdout)\r\n  sleep(wait_airdrop)\r\nend<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"661\" src=\"https:\/\/julialang.kr\/wp-content\/uploads\/2021\/12\/image.png\" alt=\"\" class=\"wp-image-3632\" srcset=\"https:\/\/julialang.kr\/wp-content\/uploads\/2021\/12\/image.png 940w, https:\/\/julialang.kr\/wp-content\/uploads\/2021\/12\/image-300x211.png 300w, https:\/\/julialang.kr\/wp-content\/uploads\/2021\/12\/image-768x540.png 768w\" sizes=\"(max-width: 940px) 100vw, 940px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Solana\ub97c \uae30\ubc18\uc73c\ub85c app\uc744 \ub9cc\ub4dc\ub294 \uacbd\uc6b0 devnet\uc774\ub098 testnet\uc5d0\uc11c \uac1c\ubc1c\uc774 \ud544\uc694\ud55c \uc774 \ub54c solana token\uc774 \ud544\uc694\ud558\ub2e4. airdrop\ubc1b\uc744 \uc784\uc2dc\uc9c0\uac11\uc744 \uc0dd\uc131\ud558\uace0 \uc784\uc2dc\uc9c0\uac11\uc5d0\uc11c \ub354 \uc774\uc0c1 airdrop\uc744 \ubc1b\uc9c0 \ubabb\ud558\ub294 \uacbd\uc6b0 \uc790\uc2e0\uc758 main\uc9c0\uac12\uc73c\ub85c airdrop\ubc1b\uc740 solana\ub97c \uc804\uc1a1\ud55c\ub2e4. testnet\uc774\ub098 devnet\uc758 \uacbd\uc6b0 \uc9c0\uac11 \uc8fc\uc18c\ub2f9 airdrop\ud558\ub294 \uac2f\uc218\uac00 \uc77c\uc815\uae30\uac04\ub3d9\uc548 \uc815\ud574\uc838 \uc788\ub294\ub4ef\ud558\ub2e4. (\ud14c\uc2a4\ud2b8 \ud574\ubcf4\ub2c8 \ub300\ub7b5 25\uac1c \uc815\ub3c4 \uc774\uba70 1\uc77c \uc815\ub3c4 \uc9c0\ub098\uba74 \ub2e4\uc2dc \ubc1b\uc744 \uc218 \uc788\uac8c \ub418\ub294\ub4ef)\uc774\ub7f0 \uc774\uc720\ub85c \uc784\uc2dc\uc9c0\uac11\uc744 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"default","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[65],"tags":[],"_links":{"self":[{"href":"https:\/\/julialang.kr\/index.php?rest_route=\/wp\/v2\/posts\/3628"}],"collection":[{"href":"https:\/\/julialang.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/julialang.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/julialang.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/julialang.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3628"}],"version-history":[{"count":7,"href":"https:\/\/julialang.kr\/index.php?rest_route=\/wp\/v2\/posts\/3628\/revisions"}],"predecessor-version":[{"id":3636,"href":"https:\/\/julialang.kr\/index.php?rest_route=\/wp\/v2\/posts\/3628\/revisions\/3636"}],"wp:attachment":[{"href":"https:\/\/julialang.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3628"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/julialang.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3628"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/julialang.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3628"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}