Seal and Operation

Operation

Mitum 블록체인 네트워크에서 operation은 데이터를 변경하는 명령의 단위입니다.
예를 들어, Mitum Currency는 create-account, transfer, key-updater, currency-register, currency-policy-updater, suffrage-infration operation을 지원합니다.
각 operation은 그 내용에 따라 개인키로 서명한 서명이 필요합니다.
operation의 fact는 실행할 내용을 담고 있으며 fact는 내용을 요약하는 hash 값이 포함되어 있습니다.

Fact and token

모든 operation은 fact를 포함하고 있습니다. 한 마디로, operation의 내용은 실재로는 fact에 들어있습니다.
fact는 Mitum 블록체인 네트워크에서 중요한 역할을 합니다.
  • fact hash는 처리된 operation을 대표하는 값입니다.

  • fact hash 블록체인에서 고유값을 가집니다.

  • operation이 블록에 저장되었는지는 fact hash를 검색해 확인할 수 있습니다.

이때, fact의 내용은 중복될 수 있습니다.
예를 들어, 동일한 내용의 두 트랜잭션은 token 이라는 요소의 도움 없이는 자연스럽게 같은 fact hash를 가지게 되며 Mitum 블록체인은 이를 다음과 같이 처리합니다.
- `sender A가 receiver B에게 토큰 100을 보낸다`는 항상 같은 fact 내용을 가집니다.
- 그러므로 같은 fact 내용만으로 만든 fact의 hash 값은 중복될 가능성이 있습니다.
- 만약 fact hash가 중복된 여러 개의 operation이 있을 경우 오직 첫 번째 operation만이 처리되며 나머지는 무시됩니다.
그렇다면, 같은 내용을 가진 fact는 다시 보낼 수 없을까요?
걱정하지 마세요. 각 fact에는 fact를 고유하게 만들어주는 token 값이 포함되어 있습니다.
token은 operation에 추가되어야 하는 필수적인 값입니다.
{
    "_hint": "mitum-currency-create-accounts-operation-fact-v0.0.1",
    "hash": "3Zdg5ZVdNFRbwX5WU7Nada3Wnx5VEgkHrDLVLkE8FMs1",
    "token": "cmFpc2VkIGJ5",
    "sender": "8PdeEpvqfyL3uZFHRZG5PS3JngYUzFFUGPvCg29C2dBnmca",
    "items": [
        {
            "_hint": "mitum-currency-create-accounts-single-amount-v0.0.1",
            "keys": {
                "_hint": "mitum-currency-keys-v0.0.1",
                "keys": [
                    {
                        "_hint": "mitum-currency-key-v0.0.1",
                        "weight": 100,
                        "key": "2Aopgs1nSzNCWLvQx5fkBJCi2uxjYBfN8TqneqFd9DzGcmpu"
                    }
                ],
                "threshold": 100
            },
            "amounts": [
                {
                    "_hint": "mitum-currency-amount-v0.0.1",
                    "amount": "333",
                    "currency": "MCC"
                }
            ]
        }
    ]
}
token은 memo와 비슷하지만, 같은 fact 내용에 대해 고유한 token을 사용함으로써 fact를 고유하게 만들어주는 특성이 있습니다.
모든 operation의 fact를 고유하게 만드는 것은 많은 방향으로 사용성을 확장시킵니다.
  • 가장 큰 이점은 token과 fact의 정확한 내용을 알고 있으면 operation이 처리되었는지 간단히 확인할 수 있다는 것입니다.

  • sender, receiver, currencyID, amount, 그리고 특정 token 값을 알고 있으면 누구나 fact hash를 계산할 수 있습니다.

  • 그러므로 fact hash에 상응하는 operation이 처리되었는지 누구나 알 수 있습니다.

fact hash는 블록체인에 기록되는 공개 증명과 같습니다. 만약 블록체인에 게시된 증명을 잘 사용하면 다양하게 응용할 수 있습니다.
예를 들자면 블록체인에 직접 계정을 가지지 않은 외부인도 operation이 처리되었는지를 나타내는 유일한 값인 fact hash를 알아내고 조건에 맞게 구현할 수 있습니다.
게다가 fact와 token들은 송금뿐만이 아닌 다양한 데이터를 다루는 모델에 유용하게 사용될 수 있습니다.

Seal

Seal은 operation의 모음으로 네트워크에 전송됩니다. 즉, operation이 seal에 담겨 전송됩니다.
  • seal을 전송하기 위해, 개인키로 만든 서명이 필요합니다.

  • 서명을 생성하기 위해 Mitum의 키페어 패키지로부터 생성한 개인키가 필요합니다.

  • seal은 최대 100 개의 operation을 담을 수 있습니다.

seal 서명에 사용되는 개인키는 블록체인 상에서 아무것도 할 필요가 없습니다. 즉, 해당 개인키는 등록된 계정의 키일 필요가 없습니다.

Send

operation 생성 후, 클라이언트는 서명을 생성 해 seal에 붙입니다.
  • seal에 담을 수 있는 최대 operation 수 내에서 필요한 가능한 많은 operation을 만들어 seal에 담으세요.

  • seal 서명을 생성해 추가하세요.

  • Mitum 노드에 seal을 전송하세요.

Stored in Block

블록체인 네트워크에 전송된 operation은 그 operation이 정상적이고 블록에 쌓인 경우 계정의 상태를 변화시킵니다.
operation이 블록에 저장되었는지 rest api 를 통해 확인할 수 있습니다.