커맨드라인으로 지갑 만드는 방법
웹 지갑 만드는 방법
사용한 웹 지갑 : 솔플레어
1-1. 커맨드 라인으로 에어드랍 받기
솔라나 api를 이용해 devnet에서 테스트용 SOL을 받아보자.
solana airdrop 1 <RECIPIENT_ACCOUNT_ADDRESS> --url https://api.devnet.solana.com
<RECIPIENT_ACCOUNT_ADDRESS>에 자신의 지갑 주소를 넣고 터미널에 위의 명령어를 입력해보자.
약 1~2초 정도 후 터미널에 1 SOL이 찍힌다.
이 지갑을 웹 지갑에 등록해두었다면 웹 지갑으로도 실시간으로 잔액 확인이 가능하다. 팬텀과 솔플레어에도 거의 즉시 반영되는 것 같다.
커맨드라인에서 아래 명령어를 통해서도 잔액을 확인할 수 있다.
solana balance <ACCOUNT_ADDRESS> --url https://api.devnet.solana.com
1-2. 웹 지갑으로 에어드랍 받기
매우 쉽다. 계정 페이지에서 에어드랍 요청 누르면 몇초만에 1 sol이 들어와 반영된다.
2-1. 커맨드 라인으로 토큰 전송하기
# 1
solana transfer --from <KEYPAIR> <RECIPIENT_ACCOUNT_ADDRESS> <AMOUNT> --fee-payer <KEYPAIR>
# 2 수신인이 못 받아도 그냥 전송
solana transfer --from <KEYPAIR> <RECIPIENT_ACCOUNT_ADDRESS> <AMOUNT> --allow-unfunded-recipient --url https://api.devnet.solana.com --fee-payer <KEYPAIR>
종이 지갑의 경우에는 <KEYPAIR> 자리에 prompt://
파일 시스템 지갑의 경우에는 키페어 파일의 경로를 입력하면 된다.
솔라나 클러스터는 트랜잭션에서 보낸 사람의 공개키에 해당하는 개인 키페어로 트랜잭션에 서명한 경우에만 전송을 수락한다.
종이지갑
prompt:// 를 입력하면 시드구문과 암호(선택)를 입력해야 서명할 수 있고, 수수료를 지불하며 거래가 이루어진다.
prompt:// 를 두번 입력했기 때문에 수수료를 지불할 fee_payer에 대한 시드구문/암호, 토큰을 전송할 from에 대한 시드구문/암호를 요구하는데, 실험해보니 수수료와 토큰 지불을 각각 다른 계정으로도 할 수 있다.
보안상 이렇게 해놓은 것 같긴 한데 너무 입력해야 되는 게 많다. 지갑 생성할 때 bip39 암호 입력했으면 명령어까지 총 5번을 쳐야 함.
파일 시스템 지갑
파일 경로를 입력하면 그냥 알아서 서명도 되고 수수료도 결제된다. 단 파일 안에 있는게 개인키기 때문에 다소 보안성이 떨어질 수 있을 듯.
2-2. 웹 지갑으로 토큰 전송하기
send를 누르고 보낼 sol의 양과 토큰을 받을 지갑 주소를 입력하면 버튼이 활성화된다.
확인을 누르면 토큰이 전송된다.
이러한 트랜잭션들은 솔라나 익스플로러에서 조회가 가능하다.
3. 스테이킹
지분(stake) = stake 계정에 있는 토큰
SOL을 받고나면, validator에게 위임하는 데에 사용할 수 있다.
솔라나는 validator에게 위임된 지분의 양으로 validator의 투표에 가중치를 부여하므로 다음 유효한 트랜잭션 블록을 결정하는 데 더 큰 영향력을 행사할 수 있다. 그래서 더 많은 지분을 위임할수록 더 많은 보상을 받을 수 있다.
3-1. 커맨드라인으로 스테이킹하기
- 스테이크 계정 생성
solana-keygen new --no-passphrase -o stake-account.json
위의 명령어를 입력하면 암호 입력 없이 pubkey와 시드구문을 반환한다. 이 키페어는 스테이크 계정을 생성하는 용도고, 생성 직후 폐기한다고 한다. 뭐 대충 일반적으로 생성해놓고 폐기해서 저장해놓지 않는다는 얘기인듯..?
공개키는 생성할 스테이크 계정에서 작업 수행할 때마다 필요하다고 하니 따로 저장해놓자. (시드 구문도 일단 저장해놓자)
이제 스테이크 계정을 만들자. 아래는 문서에서 알려준 명령어다.
solana create-stake-account --from <KEYPAIR> stake-account.json <AMOUNT> \
--stake-authority <KEYPAIR> --withdraw-authority <KEYPAIR> \
--fee-payer <KEYPAIR>
이것만 봤을 때는 키페어에 뭘 넣어야 하는건가 했는데, 에러 메세지를 받아보니 좀 더 이해하기 쉬운 가이드 문장을 줬다.
solana create-stake-account <STAKE_ACCOUNT_KEYPAIR> <AMOUNT> \
--config <FILEPATH> --fee-payer <KEYPAIR> --from <KEYPAIR> \
--stake-authority <PUBKEY> --withdraw-authority <PUBKEY>
그러니까, 기존에 우리가 갖고 있던 계정에서 스테이킹용으로만 쓸 토큰을 생성할 스테이크 계정으로 보내는 것 같다.
'from'의 계정에서 stake-account.json의 공개키를 갖는 새 스테이크 계정으로 <amount>만큼 토큰이 전송되는 것이다.
그러므로 <KEYPAIR> 자리에 스테이킹할 토큰이 있는 계정의 파일경로(파일시스템 지갑)나 prompt://(종이지갑)를 전부 넣으면 이 계정에서 스테이크 계정으로 수수료를 지불해 토큰을 옮기고, 스테이크 권한과 인출 권한을 갖게 된다.
가이드 문장에 인수로 --config가 추가됐는데, 입력 안하면 그냥 기본 config 파일로 알아서 들어간다고 하니 입력하지 않아도 되겠다.
solana stake-account <STAKE_ACCOUNT_ADDRESS>
위의 명령어를 입력하면 방금 생성한 스테이크 계정의 잔액, rent exempt reserve, 위임 여부, 스테이크 권한, 인출 권한 등을 출력한다.
- 스테이킹하기
스테이킹을 하려면 토큰을 위임할 validator가 필요하다.
다음의 명령어를 입력하면 모든 validators와 해당 투표계정 목록을 클러스터에 쿼리해서 볼 수 있다.
solana validators
데브넷은 테스트 네트워크기 때문에 validator 들이 항상 네트워크를 돌리고 있지 않는 것으로 보인다.
나는 Last vote 와 Root Slot 등이 밀리지 않고, active stake가 많은 최하단에서 네번째에 위치한 validator에 넣어보겠다.
선택한 validator에 스테이크를 위임하자.
solana delegate-stake --stake-authority <KEYPAIR> <STAKE_ACCOUNT_ADDRESS> <VOTE_ACCOUNT_ADDRESS> \
--fee-payer <KEYPAIR>
<KEYPAIR> : 스테이킹 권한을 가지게 할 계정에서 수수료 지불까지 하면 된다.
생성한 스테이크 계정 pubkey를 넣고 validator의 vote account 주소를 찾아서 넣으면 된다.
이제 생성한 스테이크 계정의 스테이크/인출권한은 내 계정에 있고 스테이크는 내가 선택한 validator에게 위임되었다.
스테이크를 위임한 후 다음 명령으로 스테이크 계정의 변경사항을 관찰할 수 있다.
solana stake-account <STAKE_ACCOUNT_ADDRESS>
- 스테이크 비활성화하기
solana deactivate-stake --stake-authority <KEYPAIR> <STAKE_ACCOUNT_ADDRESS> \
--fee-payer <KEYPAIR>
* 스테이크는 쿨다운되기까지 여러 에포크가 걸린다. 쿨다운 기간동안은 위임을 시도해도 실패할 것이라고 한다.
쿨다운 : 스테이크 비활성화가 제대로 적용되기까지의 기간. active 상태면서 undelegated 상태일 것.
3-2. 웹 지갑으로 스테이킹하기
솔플레어에서는 스테이크를 누르면 스테이크 계정을 알아서 만들어준다.
stake solana 를 누르고 start staking을 누른다.
얼마나, 어떤 validator에게 토큰을 스테이킹할 것인지 적으면 된다.
슬래싱을 당하지 않고 서버를 꾸준히 돌려서 블록이 계속 진행되게끔 관리를 잘할 수 있고, 수수료를 조금만 가져가는 validator에게 스테이크 계정을 위임하는 것이 좋다. 하지만 테스트만 할거라면 크게 상관 없을것이다.
Validator 밑의 Help me choose 를 누르면 solana beach 페이지의 validators 탭으로 이동한다.
상단에서 자신의 네트워크로 설정하고 토큰을 맡길 validator를 찾자. last vote가 오프라인인 validator들은 서버를 안 돌려서 블록 진행이 안되고 있는 것일 것이므로 피하자.
테스트 네트워크들은 대부분 수수료 100%로 돌리고 있는 듯하다...?
* 글을 작성하고 있는 현재(10.15. 오후) 솔라나 비치가 devnet 의 솔라나 블록체인을 잘 못 잡아내고 있는 듯하다.
나는 3위의 23Ao... 에 맡겨보겠다.
비밀번호를 입력하고 컨펌했더니 잠시 후 스테이킹이 되었다.
위의 페이지로 자동으로 넘어가는데, 나중에도 스테이킹 페이지에서 조회할 수 있다.
validator 주소가 긴데 줄 넘어갔을 때 처리를 따로 안해놨는지^^ active stake 랑 inactive stake 확인하기가 다소 힘들다... 그래서 개발자 모드로 창을 줄였더니 또 반응형 처리는 해놨는지 보기에 그나마 좀 편했다.
1 SOL을 맡겼더니 보다시피 active stake는 0 SOL이고, inactive stake는 1 SOL에서 0.002283 SOL이 빠진 상태다.
문서에서는 스테이킹을 맡기면 activating에서 워밍업 기간을 거쳐 effective 상태가 된다고 하는데, 솔라나 비치에서는 effective 상태를 active로 표현한다.
워밍업과 activating, effective 상태는 예제를 통해 좀 더자세히 알아볼 수 있다.
웹 지갑에서 만든 스테이크 계정의 스테이킹 내역도 커맨드라인에서 조회가 가능하다.
지금은 activating 상태인데 한 에포크 뒤에 active 상태로 전환될 것이다. 추후에 확인해보고 추가하겠다.
+) 몇 시간 지나고나니 active 상태로 변경됐다. 아직 보상을 받진 못했음.
undeligate를 누르면 위임 비활성화, split을 누르면 분할될 것이다.
스테이크의 권한 설정, 분할, 위임 해제, 인출은 다음 게시글에서 다뤄보자.
'Solana > Documentation' 카테고리의 다른 글
[Solana] 4. 솔라나 스테이킹 권한 설정, 계정 파생, 분할, 출금 (0) | 2021.10.19 |
---|---|
[Solana] 2. 팬텀, 솔플레어 지갑 만들기 (0) | 2021.10.14 |
[Solana] 1. 솔라나 설치 및 종이 지갑 생성 - CLI 사용을 위한 세팅 (0) | 2021.10.13 |
[Solana] 솔라나 CLI 사용법 메모 (0) | 2021.10.13 |
[Solana] 스테이킹 계정 구조 + 워밍업 예제 (0) | 2021.10.13 |