Wallet

각 SAT에 임의의 콘텐츠를 새길 수 있으며, 이로써 비트코인 지갑에 보관하고 비트코인 거래를 통해 전송할 수 있는 고유한 비트코인 자체 디지털 아티팩트를 만들 수 있다. 인스크립션은 비트코인만큼이나 내구성이 있고, 불변하며, 안전하고, 탈중앙화되어 있다.

인스크립션 작업에는 비트코인 블록체인의 현재 상태를 볼 수 있는 비트코인 풀 노드와 인스크립션을 생성하고 다른 지갑으로 인스크립션을 전송하는 트랜잭션을 만들 때 SAT 제어를 수행할 수 있는 지갑이 필요하다.

Bitcoin Core는 비트코인 풀노드와 지갑을 모두 제공한다. 그러나 Bitcoin Core 지갑은 인스크립션을 생성할 수 없으며, SAT 제어를 수행하지 않는다.

이를 위해서는 오디널 유틸리티인 ord가 필요하다. ord는 자체 지갑을 구현하지 않으므로 ord wallet 하위 명령은 Bitcoin Core 지갑과 상호작용한다.

이 가이드에서 다룰 토픽:

  1. Bitcoin Core 설치
  2. 비트코인 블록체인 동기화
  3. Bitcoin Core 지갑 만들기
  4. ord wallet receive을 사용하여 SAT 받기
  5. ord wallet inscribe으로 인스크립션 만들기
  6. ord wallet send로 인스크립션 보내기
  7. ord wallet receive로 인스크립션 받기
  8. Batch inscribing with ord wallet inscribe --batch

도움 받기

문제가 해결되지 않는다면, 오디널스 디스코드 서버에서 도움을 요청해 보거나 깃허브에서 관련 이슈토론을 확인해 보자.

Bitcoin Core 설치

Bitcoin Core는 bitcoincore.org다운로드 페이지에서 이용할 수 있다.

인스립션을 만들려면 Bitcoin Core 24 이상이 필요하다.

이 가이드에서는 Bitcoin Core 설치에 대해 자세히 다루지 않는다. Bitcoin Core가 설치되면 명령줄에서 bitcoind -version을 성공적으로 실행할 수 있어야 한다. bitcoin-qt는 사용하지 말라.

Bitcoin Core 설정하기

ord는 Bitcoin Core의 트랜잭션 인덱스와 rest 인터페이스가 필요하다.

트랜잭션 인덱스를 유지하도록 Bitcoin Core 노드를 설정하려면, bitcoin.conf에 다음을 추가한다:

txindex=1

또는 -txindex와 함께 bitcoind를 실행한다:

bitcoind -txindex

bitcoin.conf 파일 생성 또는 수정에 대한 자세한 내용은 여기에서 확인할 수 있다.

비트코인 블록체인 동기화

체인을 동기화하려면 다음을 실행한다:

bitcoind -txindex

...그리고 getblockcount가:

bitcoin-cli getblockcount

mempool.space block explorer와 같은 블록 탐색기의 블록 수와 일치할때까지 실행한다. ordbitcoind와 상호 작용하므로 ord을 사용할 때는 bitcoind를 백그라운드에서 실행하도록 두어야 한다.

블록체인은 약 600GB의 디스크 공간을 필요로 한다. 블록을 저장할 외장 드라이브가 있는 경우, 설정 옵션 blocksdir=<external_drive_path>를 사용한다. 이렇게 하면 쿠키 파일이 여전히 bitcoin-cliord가 찾을 수 있는 기본 위치에 있기 때문에 datadir 옵션을 사용하는 것보다 훨씬 간단하다.

트러블 슈팅

bitcoindbitcoin-cli -getinfo로 액세스할 수 있는지 그리고 이것이 완전히 동기화되었는지를 확인한다.

bitcoin-cli -getinfoCould not connect to the server을 반환하면 bitcoind가 실행되고 있지 않은 것이다.

rpcuser, rpcpassword 또는 rpcauthbitcoin.conf 파일에 설정되어 있지 않는 것을 확인하자. ord는 쿠키 인증에 사용을 요구한다. 비트코인 데이터 디렉토리에 .cookie 파일이 있는지 확인하자.

bitcoin-cli -getinfoCould not locate RPC credentials을 반환하면 쿠키 파일 위치를 지정해야 한다. 사용자 지정 데이터 디렉터리를 사용하는 경우(datadir 옵션을 지정) bitcoin-cli -rpccookiefile=<your_bitcoin_datadir>/.cookie -getinfo와 같이 쿠키 위치를 지정해야 한다. ord을 실행할 때는 --cookie-file=<your_bitcoin_datadir>/.cookie로 쿠키 파일 위치를 지정해야 한다.

bitcoin.conf 파일에 disablewallet=1없는 것을 확인하자. bitcoin-cli listwalletsMethod not found을 반환하면 지갑이 비활성화된 것이며 ord를 사용할 수 없다.

txindex=1이 설정되어 있는지 확인한다. bitcoin-cli getindexinfo를 실행하면 다음과 같은 결과가 반환되어야 한다

{
  "txindex": {
    "synced": true,
    "best_block_height": 776546
  }
}

만약 {}만 반환하면 txindex가 설정되지 않은 것이다. ”synced”: false를 반환하면 bitcoind가 여전히 txindex를 생성하고 있는 것이다. ”synced”: true가 될 때까지 기다렸다가 ord를 사용하라.

maxuploadtarget이 설정되어 있으면 ord 인덱스를 위해 블록을 가져오는 데 방해가 될 수 있다. 이를 제거하거나 whitebind=127.0.0.1:8333을 설정하라.

ord 설치

'ord` 유틸리티는 Rust로 작성되었으며 소스에서 빌드할 수 있다. 미리 빌드된 바이너리는 릴리스 페이지에서 사용할 수 있다.

명령줄에서 다음을 사용하여 미리 빌드된 최신 바이너리를 설치할 수 있다:

curl --proto '=https' --tlsv1.2 -fsLS https://ordinals.com/install.sh | bash -s

ord가 설치되면 다음을 실행할 수 있어야 한다:

ord --version

이것이 ord의 버전 번호를 출력한다.

Creating a Wallet

ord uses bitcoind to manage private keys, sign transactions, and broadcast transactions to the Bitcoin network. Additionally the ord wallet requires ord server running in the background. Make sure these programs are running:

bitcoind -txindex
ord server

To create a wallet named ord, the default, for use with ord wallet, run:

ord wallet create

This will print out your seed phrase mnemonic, store it somewhere safe.

{
  "mnemonic": "dignity buddy actor toast talk crisp city annual tourist orient similar federal",
  "passphrase": ""
}

If you want to specify a different name or use an ord server running on a non-default URL you can set these options:

ord wallet --name foo --server-url http://127.0.0.1:8080 create

To see all available wallet options you can run:

ord wallet help

Restoring and Dumping Wallet

The ord wallet uses descriptors, so you can export the output descriptors and import them into another descriptor-based wallet. To export the wallet descriptors, which include your private keys:

$ ord wallet dump
==========================================
= THIS STRING CONTAINS YOUR PRIVATE KEYS =
=        DO NOT SHARE WITH ANYONE        =
==========================================
{
  "wallet_name": "ord",
  "descriptors": [
    {
      "desc": "tr([551ac972/86'/1'/0']tprv8h4xBhrfZwX9o1XtUMmz92yNiGRYjF9B1vkvQ858aN1UQcACZNqN9nFzj3vrYPa4jdPMfw4ooMuNBfR4gcYm7LmhKZNTaF4etbN29Tj7UcH/0/*)#uxn94yt5",
      "timestamp": 1296688602,
      "active": true,
      "internal": false,
      "range": [
        0,
        999
      ],
      "next": 0
    },
    {
      "desc": "tr([551ac972/86'/1'/0']tprv8h4xBhrfZwX9o1XtUMmz92yNiGRYjF9B1vkvQ858aN1UQcACZNqN9nFzj3vrYPa4jdPMfw4ooMuNBfR4gcYm7LmhKZNTaF4etbN29Tj7UcH/1/*)#djkyg3mv",
      "timestamp": 1296688602,
      "active": true,
      "internal": true,
      "range": [
        0,
        999
      ],
      "next": 0
    }
  ]
}

An ord wallet can be restored from a mnemonic:

ord wallet restore --from mnemonic

Type your mnemonic and press return.

To restore from a descriptor in descriptor.json:

cat descriptor.json | ord wallet restore --from descriptor

To restore from a descriptor in the clipboard:

ord wallet restore --from descriptor

Paste the descriptor into the terminal and press CTRL-D on unix and CTRL-Z on Windows.

SAT 받기

인스크립션은 SAT로 수수료를 지불하는 일반 비트코인 거래를 사용하여 개별 SAT에 새김 됨으로 지갑에 약간의 SAT가 필요하다.

다음을 실행하여 ord 지갑에서 새 주소를 가져온다:

ord wallet receive

그리고 자금을 조금 보내자.

다음을 사용하여 펜딩 트랜잭션을 확인할 수 있다:

ord wallet transactions

트랜잭션이 컨펌되면 ord wallet outputs으로 트랜잭션 출력을 확인할 수 있다.

인스크립션 콘텐츠 만들기

SAT에는 모든 종류의 콘텐츠를 새길 수 있지만, ord 지갑은 ord 블록 탐색기에서 표시할 수 있는 콘텐츠 유형만 지원한다.

또한 인스크립션은 트랜잭션에 포함되므로 콘텐츠가 클수록 인스크립션 트랜잭션에서 지불해야 하는 수수료가 높아진다.

인스크립션 콘텐츠는 트랜잭션 증인에 포함되며, 증인 할인(witness discount)을 받는다. 인스크립트 트랜잭션이 지불할 대략의 수수료를 계산하려면 콘텐츠 크기를 4로 나눈 다음 수수료율을 곱하면 된다.

인스크립션 트랜잭션은 400,000 가중치 단위(weight unit) 미만이어야 하며, 그렇지 않으면 Bitcoin Core에서 릴레이 되지 않는다. 1바이트의 인스크립션 콘텐츠는 1 가중치 단위의 비용이 든다. 인스크립션 트랜잭션에는 인스크립션 콘텐츠만 포함되지 않으므로, 인스크립션 콘텐츠를 400,000 가중치 단위 미만으로 제한하라. 390,000 개의 가중치 단위미만은 안전할 것이다.

인스크립션 생성하기

FILE의 내용으로 인스크립션을 만들려면 다음을 실행한다:

ord wallet inscribe --fee-rate FEE_RATE --file FILE

Ord는 커밋 트랜잭션과 리빌 트랜잭션에 대한 두 개의 트랜잭션 ID와 인스크립션 ID를 출력한다. 인스크립션 ID는 TXIDiN 형식이며, 여기서 TXID는 리빌 트랜잭션의 트랜잭션 ID이고 N은 리빌 트랜잭션안에 있는 인스크립션의 인덱스이다.

커밋 트랜잭션은 인스크립션 콘텐츠가 포함된 탭스크립트(tapscript)에 커밋하고, 리빌 트랜잭션은 해당 탭스크립트에서 지출하여 체인에서 콘텐츠를 공개하고 해당 탭스크립트가 포함된 입력의 첫 번째 SAT에 인스크립션을 새긴다.

리빌 트랜잭션이 채굴될 때까지 기다린다. Mempool.space 블록 탐색기를 사용하여 커밋 및 리빌 트랜잭션의 상태를 확인할 수 있다.

리빌 트랜잭션이 채굴되면 다음을 실행할 때 인스크립션 ID가 출력되어야 한다:

ord wallet inscriptions

부모-자식 인스크립션

부모-자식 인스크립션은 구어체로 컬렉션이라고 하는 것을 가능하게 한다. 자세한 내용은 기원을 참조하자.

인스크립션을 다른 인스크립션의 자식으로 만들려면 부모 인스크립션이 새김되어 있고 지갑에 있어야 한다. 부모를 선택하려면 ord wallet inscriptions을 실행하고 인스크립션 ID(<PARENT_INSCRIPTION_ID>)를 복사한다.

이제 자식 인스크립션을 새기고 부모를 다음과 같이 지정한다:

ord wallet inscribe --fee-rate FEE_RATE --parent <PARENT_INSCRIPTION_ID> --file CHILD_FILE

이 관계는 소급하여 추가할 수 없으며, 부모는 자녀가 시작될 때 이미 존재해야 한다.

인스크립션 보내기

수신자에게 다음을 실행해 새 주소를 생성하도록 요청한다:

ord wallet receive

다음을 실행하여 인스크립션을 보낸다:

ord wallet send --fee-rate <FEE_RATE> <ADDRESS> <INSCRIPTION_ID>

다음을 실행하여 펜딩 트랜잭션을 확인한다:

ord wallet transactions

전송 트랜잭션이 확인되면 수신자는 다음을 실행하여 수신을 확인할 수 있다:

ord wallet inscriptions

Sending Runes

수신자에게 다음을 실행해 새 주소를 생성하도록 요청한다:

ord wallet receive

Send the runes by running:

ord wallet send --fee-rate <FEE_RATE> <ADDRESS> <RUNES_AMOUNT>

Where RUNES_AMOUNT is the number of runes to send, a : character, and the name of the rune. For example if you want to send 1000 of the EXAMPLE rune, you would use 1000:EXAMPLE.

ord wallet send --fee-rate 1 SOME_ADDRESS 1000:EXAMPLE

다음을 실행하여 펜딩 트랜잭션을 확인한다:

ord wallet transactions

Once the send transaction confirms, the recipient can confirm receipt with:

ord wallet balance

인스크립션 받기

다음을 사용하여 새 수신 주소를 생성한다:

ord wallet receive

발신자는 다음을 사용하여 인스크립션을 당신의 주소로 전송할 수 있다:

ord wallet send --fee-rate <FEE_RATE> ADDRESS INSCRIPTION_ID

다음을 실행하여 펜딩 트랜잭션을 확인한다:

ord wallet transactions

Once the send transaction confirms, you can confirm receipt by running:

ord wallet inscriptions