Edit

Multisig Wallet #1

Ethereum multisigwallet ethereum

Multisig Wallet 을 구현해보자. 블록체인의 응용을 이야기 하거나 할 때 빠지지 않는 단골 메뉴이기도 한 Multi Signature 를 활용하는 Wallet 을 만들어 보고, gnosis, consensys 애들이 만든 Multisign Wallet 은 어떤 구조를 갖고 있는지도 봐보는 재미진 시간을 가져보자

Blockchain 의 Wallet

일단 Wallet 의 개념은 다 알것이다. 특히 Blockchain 의 Wallet 또한 모두 잘 알 것이다. Blockchain 의 Wallet 은

  • Key Pair (Private / Public Key) 를 생성하여 안전하게 보관
  • Transaction 을 생성하고 여기에 본인의 전자서명을 첨부 (보통 Transaction 의 Hash 값을 원문으로 함)
  • Account 기반의 State Model 인 경우, Account Nonce 를 관리

를 기본 기능으로 가지며, 추가적으로

  • 복수의 계좌(Account)를 생성/관리 하는 HD Wallet 의 경우 KDF(Key Derivation Function)를 통한 루트 키와 Derived Key 관리
  • Mnemonic 기반의
  • Web 기반 dApp 실행을 위한 Web View 와 web3.js 등의 JS Injection
  • (Ethereum) ERC 20 기반의 Token 및 기타 EIP 제안 중 널리 쓰이는 ERC 지원(ERC721 등)

등의 기능을 가지는 Wallet 들이 많아지고 있다.

Wallet 에 관해서는 이번 주제 끝나고 다음에 한번 상세히 다루어 보도록 하겠다
HD Wallet 이나 Cold Wallet 에 대해서도 재미난 것들이 많이 있으니 그때 또~

일반 Crypto Wallet 의 Transfer Transaction

Multisig Wallet 은 Crypto Wallet 자체에서 지원하는 기능은 아니다. UTXO 내의 Script 혹은 Smart Contract 의 코드로 Blockchain 내에 존재한다.

일단 아래는 단순화 된 일반적인 Wallet 의 Transfer 과정이다

그림을 단순화 해서 그렇지 Wallet 내부에서는 아래와 같은 과정을 거친다

  1. (secp256k1 으로 Private Key 는 이미 생성 되었다고 가정한다. 즉, 주소는 이미 생성 되었다고 가정한다)
  2. ECDSA 전자서명이 붙지 않은, 100 Ether 를 Value 로 하는 Raw Transaction 을 구성한다
  3. Raw Transaction 의 keccak256 Hash 를 원문으로 한 ECDSA 전자서명 값 r,s,v 를 추가하여 Transaction 을 만든다
  4. Wallet 서비스를 하는 Gateway 를 거치거나 혹은 직접 Node 에게(이런경우는 흔치 않다) Transaction 을 Submit 한다
  5. 100 Ether 는 to address 에 해당하는 Account 의 State 에 더해진다

UTXO 기반 모델의 Blockchain 도 Wallet 의 기능은 마찬가지이다

Multisig Wallet 의 Transfer Transaction

일반적으로 Multisig Wallet 은 2개 이상의 서명이 있어야 실제 Token 의 이체가 일어나게 할 수 있는 기능을 갖는 Wallet 을 말한다.

Bitcoin Wallet 개발하시는 분들은 Multisig Wallet 하면, Wallet 에서 생성한 Tx(Transaction) 내 Output 의 Locking Script(Pubkey Script) 부분에 OP_CHECKMULTISIG 를 포함하도록 만드는 것을 생각 할 수 있겠다.

Ethereum 과 같이 Smart Contract 를 지원하는 블록체인의 경우는 좀더 세련된 방식으로 Multisig Wallet 을 만든다. 또한, Token Asset 의 이체를 위한 Transfer Transaction 뿐만이 아니라 Smart Contract 실행을 위한 Message Transaction 또한 조건을 만족하는 복수개의 서명이 Submit 되었을때에만 실행되게 할 수 있다(보통 이렇게 만든다).

왜 갑자기 Wallet 얘기를 하는데 Smart Contract 얘기가 나오는가 할 수도 있다. 예전부터 많은 사람들이 이부분을 헷갈려 한다는걸 느꼈다. Multisig Wallet 은 결국 내가 제출한 Transaction 에 대해, 미리 지정된 복수의 Account Owner 가 전자서명을 통해 허락해야지만 실제로 그 Transaction 이 실행되어야 하는 규칙 이다.

이러한 규칙은 Wallet App 에 구현되고 저장되는 경우 충분히 위변조 될 수 있으며 중요한 돈거래의 경우 보안성과 범용성의 측면에서 뭐하나 이로울게 없다. 그 얘기는, 블록체인 기술과 Smart Contract 의 필요성이 가장 강한 형태의 dApp 중 하나가 바로 Multisig Wallet 인 것이다.

아래의 Diagram 은 Multisig Wallet 의 동작을 단순화 해본 그림이다
상황은 0xa0c9… 주소를 갖는 EOA 가 0x039b… 에게 100 Ether 를 이체하려고 하며, 이때 미리 지정한 0x0248… EOA 의 최종 승인 이 있어야지만 실제로 100 Ether 가 0x039b… 에게 이체되는 Transaction 이 실행되게 해야 한다.

구성요소

  • Wallet - Account 소유자가 설치한 Browser Plug-in, Desktop, Mobile 용의 Wallet App (Metamask, MEW, Jaxx, Exodus …) 이거나 Smart Contract 실행을 위한 Message Transaction 을 만들어낼 수 있는 어떠한 dApp 도 될 수 있다
  • Multisig Wallet Contract
    • 이체하고자 하는 Token 을 보관
    • 제출 된 Transaction 실행 요건 지정 (n of m 개의 전자서명 요구와 같은)
    • 전자서명 주체가 되는 Wallet Owner 들의 등록 및 관리
    • Transaction 제출 알림
    • 요건을 만족한 경우 Transaction 의 실제 실행

이외에도 Wallet 앱을 개발하고 서비스 하는 회사의 경우, 아무나 자신들이 운영하는 Node 에 수많은 Transaction 을 날려 DoS Attack 을 하거나 부하를 일으키지 않도록 하고 부가적인 서비스를 제공하기위한 목적으로 Wallet Service Gateway 를 둘 수도 있겠지만 Offchain 시스템은 모두 생략하였다

위 구성요소의 설명을 보면 알겠지만 핵심은 Multisig Wallet Contract 이다. Multisig Wallet의 모든 핵심 기능은 이 Contract 에서 이루어진다. 예전에 문제가 된 Parity 의 Multisig Wallet 도 물론 Smart Contract 이다.

흐름

위 Multisig Wallet Contract 를 사용하는 흐름을 보면 간단하다 하지만 이전 글에서는 다루지 않았던 새로운 요소가 하나 등장한다

  1. submitTransaction
    submitTranaction() 을 실행하기 위한 Message Transaction 의 Parameter 를 이용하여 실제 Token(Ether) 을 받을 주소를 넣어준다

    이때, Token 을 받을 대상이 다른 Smart Contract 이고 Transaction 종류가 Message Transaction 인 경우, submitTransaction() 의 파라미터 중 하나에 실행해야 하는 Smart Contract 의 Method 와 파라미터를 포함하는 Data Payload 를 넣어준다 (web3 의 .getData() 사용)

    추가적으로, 예의상 submitTransaction() 이 되면 Event 로 transaction 이 submit 되었다고 알려주는 센스 정도는 설명하지 않아도 구현 되어야 한다고 느낌이 올 것이다

이부분은 구현 부분에서 설명하겠다. 향후 CALL, CALLCODE, DELEGATECALL 과 관련 있는 부분이니 그때 또 설명 하겠다 (음.. 오랜만이 시작하려니 설명할게 산더미같다..)

  1. confirmTransaction
    위 submitTransaction() 으로 제출 된 Transaction 을 승인 하는 단계이다. Contract 에 등록된 승인 권한이 있는 EOA 가 confirmTransaction() 을 통해 confirm 해주면 된다. 이때, 각 confirm 시 마다 등록된 조건(최소 n 개의 confirm 필요)을 만족하는 confirm 을 받았는지 check 한다

  2. executeTransaction
    confirmTransaction() 실행 시 만족하는 confirm 수가 채워졌으면 submitTransaction() 시에 제출 된 token 의 양 만큼을 원래 보내고자 했던 주소로 보내주도록 Transaction 의 value 값을 채우며, submitTransaction() 단계에서 제출 된 Message Transaction 이 있었다면 Wallet Contract 가(msg.sender == Wallet Contract) 해당 Message Transaction 을 실행한다

Multisig 인데, 서명은 언제하는가?

전에 Multisig Wallet 에 대해 차분히 설명 해주고 나서 들었던 질문이 있었다. “그런데 다른사람들(EOA)이 전자서명은 언제 해줘요?” 전자서명은 이미 Smart Contract 를 실행하는 submitTransaction(), confirmTransaction() 단계에서 Message Transaction 을 보내기 위해 Raw Transaction 에 대고 다 했다. 그래야 Transaction 이 submit 되었지 않겠는가..요.. 라고 답을 해줬던 기억이 난다.

(단, Smart Contract 이 internal call 을 하는 구간에는 전자서명이 당연히 없다. EOA 에서 이미 했지않은가. Smart Contract 는 서명할 수 있는 놈이 아니다. Smart Contract 을 실행한 놈이 이미 전자서명을 해서 Message Transaction 을 보낸 것이다)

이름이 문제다. Multisig.. 사실 confirmTransaction() 단계에서 파라미터로 메시지와 전자서명값 r,s,v 를 넣어줄 수도 있다. 그러나 다른 EOA 의 전자서명을 전달하는 상황이 아니고 confirmTransaction() 을 실행하는 주체 자체가 승인 권한을 가진 EOA 이므로 이미 transaction 내에 들어있는 전자서명을 Multisig Wallet Contract 의 파라미터로 보낼 이유가 없는 것이다

마치며

오랜만에 올리는 글 치고는 매우 기본적인 주제를 올려본다. 사실 0xProtocol, Plasma, Raiden, ERC20 Token 기반으로 돌아가는 dApp 만들기, plasma-mvp … 또는 Enterprise Blockchain, Quorum 등등 무엇부터 시작할까를 많이 고민해보았다.

그리고 이전에 올렸던 글들을 다시 훑어보다가, 블로그의 흐름이 갑자기 끊기는것 보다는 이전의 Context 를 이어나아가면서 좀더 빠르게 진행해보는 것으로 일단 마음을 먹어본다. (그래도 기본은 기본대로 가고, 중간중간 발표자료도 좀 올리고, 이런저런 구현 샘플들도 짬짬이 올리겠다^^;;)

다음은 Multisig Wallet 구현 예제를 1회 정도 올리고 퀵하게 마무리 하고 또 그 다음으로 넘어가 보도록 하는걸 목표로 해보겠다

%23%20Multisig%20Wallet%20%231%0A@%28220.Blockchain%29%5B%uC774%uB354%uB9AC%uC6C0%2C%20Ethereum%2C%20%uD2F0%uC2A4%uD1A0%uB9AC%2C%20multisigwallet%2C%20ethereum%5D%0A%0A%3Cimg%20src%3D%22./1543316979811.png%22%20width%3D%22300%22%20align%3D%22middle%22%20/%3E%0A%0AMultisig%20Wallet%20%uC744%20%uAD6C%uD604%uD574%uBCF4%uC790.%20%uBE14%uB85D%uCCB4%uC778%uC758%20%uC751%uC6A9%uC744%20%uC774%uC57C%uAE30%20%uD558%uAC70%uB098%20%uD560%20%uB54C%20%uBE60%uC9C0%uC9C0%20%uC54A%uB294%20%uB2E8%uACE8%20%uBA54%uB274%uC774%uAE30%uB3C4%20%uD55C%20Multi%20Signature%20%uB97C%20%uD65C%uC6A9%uD558%uB294%20Wallet%20%uC744%20%uB9CC%uB4E4%uC5B4%20%uBCF4%uACE0%2C%20gnosis%2C%20consensys%20%uC560%uB4E4%uC774%20%uB9CC%uB4E0%20Multisign%20Wallet%20%uC740%20%uC5B4%uB5A4%20%uAD6C%uC870%uB97C%20%uAC16%uACE0%20%uC788%uB294%uC9C0%uB3C4%20%uBD10%uBCF4%uB294%20%uC7AC%uBBF8%uC9C4%20%uC2DC%uAC04%uC744%20%uAC00%uC838%uBCF4%uC790%20%0A%0A%23%23%20Blockchain%20%uC758%20Wallet%0A%uC77C%uB2E8%20Wallet%20%uC758%20%uAC1C%uB150%uC740%20%uB2E4%20%uC54C%uAC83%uC774%uB2E4.%20%uD2B9%uD788%20Blockchain%20%uC758%20Wallet%20%uB610%uD55C%20%uBAA8%uB450%20%uC798%20%uC54C%20%uAC83%uC774%uB2E4.%20Blockchain%20%uC758%20Wallet%20%uC740%20%0A-%20Key%20Pair%20%28Private%20/%20Public%20Key%29%20%uB97C%20%uC0DD%uC131%uD558%uC5EC%20%uC548%uC804%uD558%uAC8C%20%uBCF4%uAD00%0A-%20Transaction%20%uC744%20%uC0DD%uC131%uD558%uACE0%20%uC5EC%uAE30%uC5D0%20%uBCF8%uC778%uC758%20%uC804%uC790%uC11C%uBA85%uC744%20%uCCA8%uBD80%20%28%uBCF4%uD1B5%20Transaction%20%uC758%20Hash%20%uAC12%uC744%20%uC6D0%uBB38%uC73C%uB85C%20%uD568%29%0A-%20Account%20%uAE30%uBC18%uC758%20State%20Model%20%uC778%20%uACBD%uC6B0%2C%20Account%20Nonce%20%uB97C%20%uAD00%uB9AC%0A%0A%uB97C%20%uAE30%uBCF8%20%uAE30%uB2A5%uC73C%uB85C%20%uAC00%uC9C0%uBA70%2C%20%uCD94%uAC00%uC801%uC73C%uB85C%0A-%20%uBCF5%uC218%uC758%20%uACC4%uC88C%28Account%29%uB97C%20%uC0DD%uC131/%uAD00%uB9AC%20%uD558%uB294%20HD%20Wallet%20%uC758%20%uACBD%uC6B0%20KDF%28Key%20Derivation%20Function%29%uB97C%20%uD1B5%uD55C%20%uB8E8%uD2B8%20%uD0A4%uC640%20Derived%20Key%20%uAD00%uB9AC%20%0A-%20Mnemonic%20%uAE30%uBC18%uC758%20%0A-%20Web%20%uAE30%uBC18%20dApp%20%uC2E4%uD589%uC744%20%uC704%uD55C%20Web%20View%20%uC640%20web3.js%20%uB4F1%uC758%20JS%20Injection%0A-%20%28Ethereum%29%20ERC%2020%20%uAE30%uBC18%uC758%20Token%20%uBC0F%20%uAE30%uD0C0%20EIP%20%uC81C%uC548%20%uC911%20%uB110%uB9AC%20%uC4F0%uC774%uB294%20ERC%20%uC9C0%uC6D0%28ERC721%20%uB4F1%29%0A%0A%uB4F1%uC758%20%uAE30%uB2A5%uC744%20%uAC00%uC9C0%uB294%20Wallet%20%uB4E4%uC774%20%uB9CE%uC544%uC9C0%uACE0%20%uC788%uB2E4.%0A%0A%3E%20Wallet%20%uC5D0%20%uAD00%uD574%uC11C%uB294%20%uC774%uBC88%20%uC8FC%uC81C%20%uB05D%uB098%uACE0%20%uB2E4%uC74C%uC5D0%20%uD55C%uBC88%20%uC0C1%uC138%uD788%20%uB2E4%uB8E8%uC5B4%20%uBCF4%uB3C4%uB85D%20%uD558%uACA0%uB2E4%0A%3E%20HD%20Wallet%20%uC774%uB098%20Cold%20Wallet%20%uC5D0%20%uB300%uD574%uC11C%uB3C4%20%uC7AC%uBBF8%uB09C%20%uAC83%uB4E4%uC774%20%uB9CE%uC774%20%uC788%uC73C%uB2C8%20%uADF8%uB54C%20%uB610%7E%0A%0A%23%23%23%20%uC77C%uBC18%20Crypto%20Wallet%20%uC758%20Transfer%20Transaction%0AMultisig%20Wallet%20%uC740%20Crypto%20Wallet%20%uC790%uCCB4%uC5D0%uC11C%20%uC9C0%uC6D0%uD558%uB294%20%uAE30%uB2A5%uC740%20%uC544%uB2C8%uB2E4.%20UTXO%20%uB0B4%uC758%20Script%20%uD639%uC740%20Smart%20Contract%20%uC758%20%uCF54%uB4DC%uB85C%20Blockchain%20%uB0B4%uC5D0%20%uC874%uC7AC%uD55C%uB2E4.%0A%0A%uC77C%uB2E8%20%uC544%uB798%uB294%20%uB2E8%uC21C%uD654%20%uB41C%20%uC77C%uBC18%uC801%uC778%20Wallet%20%uC758%20Transfer%20%uACFC%uC815%uC774%uB2E4%0A%0A%3Cimg%20src%3D%22./multisig00.png%22%20width%3D%22600%22/%3E%0A%0A%uADF8%uB9BC%uC744%20%uB2E8%uC21C%uD654%20%uD574%uC11C%20%uADF8%uB807%uC9C0%20Wallet%20%uB0B4%uBD80%uC5D0%uC11C%uB294%20%uC544%uB798%uC640%20%uAC19%uC740%20%uACFC%uC815%uC744%20%uAC70%uCE5C%uB2E4%0A1.%20%28secp256k1%20%uC73C%uB85C%20Private%20Key%20%uB294%20%uC774%uBBF8%20%uC0DD%uC131%20%uB418%uC5C8%uB2E4%uACE0%20%uAC00%uC815%uD55C%uB2E4.%20%uC989%2C%20%uC8FC%uC18C%uB294%20%uC774%uBBF8%20%uC0DD%uC131%20%uB418%uC5C8%uB2E4%uACE0%20%uAC00%uC815%uD55C%uB2E4%29%0A2.%20ECDSA%20%uC804%uC790%uC11C%uBA85%uC774%20%uBD99%uC9C0%20%uC54A%uC740%2C%20100%20Ether%20%uB97C%20Value%20%uB85C%20%uD558%uB294%20Raw%20Transaction%20%uC744%20%uAD6C%uC131%uD55C%uB2E4%0A3.%20Raw%20Transaction%20%uC758%20keccak256%20Hash%20%uB97C%20%uC6D0%uBB38%uC73C%uB85C%20%uD55C%20ECDSA%20%uC804%uC790%uC11C%uBA85%20%uAC12%20r%2Cs%2Cv%20%uB97C%20%uCD94%uAC00%uD558%uC5EC%20Transaction%20%uC744%20%uB9CC%uB4E0%uB2E4%0A4.%20Wallet%20%uC11C%uBE44%uC2A4%uB97C%20%uD558%uB294%20Gateway%20%uB97C%20%uAC70%uCE58%uAC70%uB098%20%uD639%uC740%20%uC9C1%uC811%20Node%20%uC5D0%uAC8C%28%uC774%uB7F0%uACBD%uC6B0%uB294%20%uD754%uCE58%20%uC54A%uB2E4%29%20Transaction%20%uC744%20Submit%20%uD55C%uB2E4%0A5.%20100%20Ether%20%uB294%20**to**%20address%20%uC5D0%20%uD574%uB2F9%uD558%uB294%20Account%20%uC758%20State%20%uC5D0%20%uB354%uD574%uC9C4%uB2E4%0A%0AUTXO%20%uAE30%uBC18%20%uBAA8%uB378%uC758%20Blockchain%20%uB3C4%20Wallet%20%uC758%20%uAE30%uB2A5%uC740%20%uB9C8%uCC2C%uAC00%uC9C0%uC774%uB2E4%0A%0A%23%23%20Multisig%20Wallet%20%uC758%20Transfer%20Transaction%0A%uC77C%uBC18%uC801%uC73C%uB85C%20Multisig%20Wallet%20%uC740%202%uAC1C%20%uC774%uC0C1%uC758%20%uC11C%uBA85%uC774%20%uC788%uC5B4%uC57C%20%uC2E4%uC81C%20Token%20%uC758%20%uC774%uCCB4%uAC00%20%uC77C%uC5B4%uB098%uAC8C%20%uD560%20%uC218%20%uC788%uB294%20**%uAE30%uB2A5**%uC744%20%uAC16%uB294%20Wallet%20%uC744%20%uB9D0%uD55C%uB2E4.%20%0A%0ABitcoin%20Wallet%20%uAC1C%uBC1C%uD558%uC2DC%uB294%20%uBD84%uB4E4%uC740%20Multisig%20Wallet%20%uD558%uBA74%2C%20Wallet%20%uC5D0%uC11C%20%uC0DD%uC131%uD55C%20Tx%28Transaction%29%20%uB0B4%20Output%20%uC758%20Locking%20Script%28Pubkey%20Script%29%20%uBD80%uBD84%uC5D0%20OP_CHECKMULTISIG%20%uB97C%20%uD3EC%uD568%uD558%uB3C4%uB85D%20%uB9CC%uB4DC%uB294%20%uAC83%uC744%20%uC0DD%uAC01%20%uD560%20%uC218%20%uC788%uACA0%uB2E4.%20%0A%0AEthereum%20%uACFC%20%uAC19%uC774%20Smart%20Contract%20%uB97C%20%uC9C0%uC6D0%uD558%uB294%20%uBE14%uB85D%uCCB4%uC778%uC758%20%uACBD%uC6B0%uB294%20%uC880%uB354%20%uC138%uB828%uB41C%20%uBC29%uC2DD%uC73C%uB85C%20Multisig%20Wallet%20%uC744%20%uB9CC%uB4E0%uB2E4.%20%uB610%uD55C%2C%20Token%20Asset%20%uC758%20%uC774%uCCB4%uB97C%20%uC704%uD55C%20Transfer%20Transaction%20%uBFD0%uB9CC%uC774%20%uC544%uB2C8%uB77C%20Smart%20Contract%20%uC2E4%uD589%uC744%20%uC704%uD55C%20Message%20Transaction%20%uB610%uD55C%20%uC870%uAC74%uC744%20%uB9CC%uC871%uD558%uB294%20**%uBCF5%uC218%uAC1C%uC758%20%uC11C%uBA85**%uC774%20Submit%20%uB418%uC5C8%uC744%uB54C%uC5D0%uB9CC%20%uC2E4%uD589%uB418%uAC8C%20%uD560%20%uC218%20%uC788%uB2E4%28%uBCF4%uD1B5%20%uC774%uB807%uAC8C%20%uB9CC%uB4E0%uB2E4%29.%0A%0A%uC65C%20%uAC11%uC790%uAE30%20Wallet%20%uC598%uAE30%uB97C%20%uD558%uB294%uB370%20Smart%20Contract%20%uC598%uAE30%uAC00%20%uB098%uC624%uB294%uAC00%20%uD560%20%uC218%uB3C4%20%uC788%uB2E4.%20%uC608%uC804%uBD80%uD130%20%uB9CE%uC740%20%uC0AC%uB78C%uB4E4%uC774%20%uC774%uBD80%uBD84%uC744%20%uD5F7%uAC08%uB824%20%uD55C%uB2E4%uB294%uAC78%20%uB290%uAF08%uB2E4.%20Multisig%20Wallet%20%uC740%20%uACB0%uAD6D%20**%uB0B4%uAC00%20%uC81C%uCD9C%uD55C%20Transaction%20%uC5D0%20%uB300%uD574%2C%20%uBBF8%uB9AC%20%uC9C0%uC815%uB41C%20%uBCF5%uC218%uC758%20Account%20Owner%20%uAC00%20%uC804%uC790%uC11C%uBA85%uC744%20%uD1B5%uD574%20%uD5C8%uB77D**%uD574%uC57C%uC9C0%uB9CC%20%uC2E4%uC81C%uB85C%20%uADF8%20Transaction%20%uC774%20%uC2E4%uD589%uB418%uC5B4%uC57C%20%uD558%uB294%20**%uADDC%uCE59**%20%uC774%uB2E4.%0A%0A%uC774%uB7EC%uD55C%20**%uADDC%uCE59**%uC740%20Wallet%20App%20%uC5D0%20%uAD6C%uD604%uB418%uACE0%20%uC800%uC7A5%uB418%uB294%20%uACBD%uC6B0%20%uCDA9%uBD84%uD788%20%uC704%uBCC0%uC870%20%uB420%20%uC218%20%uC788%uC73C%uBA70%20%uC911%uC694%uD55C%20%uB3C8%uAC70%uB798%uC758%20%uACBD%uC6B0%20%uBCF4%uC548%uC131%uACFC%20%uBC94%uC6A9%uC131%uC758%20%uCE21%uBA74%uC5D0%uC11C%20%uBB50%uD558%uB098%20%uC774%uB85C%uC6B8%uAC8C%20%uC5C6%uB2E4.%20%uADF8%20%uC598%uAE30%uB294%2C%20%uBE14%uB85D%uCCB4%uC778%20%uAE30%uC220%uACFC%20Smart%20Contract%20%uC758%20%uD544%uC694%uC131%uC774%20%uAC00%uC7A5%20%uAC15%uD55C%20%uD615%uD0DC%uC758%20dApp%20%uC911%20%uD558%uB098%uAC00%20%uBC14%uB85C%20Multisig%20Wallet%20%uC778%20%uAC83%uC774%uB2E4.%0A%0A%uC544%uB798%uC758%20Diagram%20%uC740%20Multisig%20Wallet%20%uC758%20%uB3D9%uC791%uC744%20%uB2E8%uC21C%uD654%20%uD574%uBCF8%20%uADF8%uB9BC%uC774%uB2E4%0A%uC0C1%uD669%uC740%200xa0c9...%20%uC8FC%uC18C%uB97C%20%uAC16%uB294%20EOA%20%uAC00%200x039b...%20%uC5D0%uAC8C%20100%20Ether%20%uB97C%20%uC774%uCCB4%uD558%uB824%uACE0%20%uD558%uBA70%2C%20%uC774%uB54C%20%uBBF8%uB9AC%20%uC9C0%uC815%uD55C%200x0248...%20EOA%20%uC758%20%uCD5C%uC885%20**%uC2B9%uC778**%20%uC774%20%uC788%uC5B4%uC57C%uC9C0%uB9CC%20%uC2E4%uC81C%uB85C%20100%20Ether%20%uAC00%200x039b...%20%uC5D0%uAC8C%20%uC774%uCCB4%uB418%uB294%20Transaction%20%uC774%20%uC2E4%uD589%uB418%uAC8C%20%uD574%uC57C%20%uD55C%uB2E4.%0A%0A%3Cimg%20src%3D%22./multisig01.png%22%20width%3D%22600%22%20/%3E%0A%0A%23%23%23%20%uAD6C%uC131%uC694%uC18C%0A-%20**Wallet**%20-%20Account%20%uC18C%uC720%uC790%uAC00%20%uC124%uCE58%uD55C%20Browser%20Plug-in%2C%20Desktop%2C%20Mobile%20%uC6A9%uC758%20Wallet%20App%20%28Metamask%2C%20MEW%2C%20Jaxx%2C%20Exodus%20...%29%20%20%uC774%uAC70%uB098%20Smart%20Contract%20%uC2E4%uD589%uC744%20%uC704%uD55C%20Message%20Transaction%20%uC744%20%uB9CC%uB4E4%uC5B4%uB0BC%20%uC218%20%uC788%uB294%20%uC5B4%uB5A0%uD55C%20dApp%20%uB3C4%20%uB420%20%uC218%20%uC788%uB2E4%0A-%20**Multisig%20Wallet%20Contract**%0A%09-%20%uC774%uCCB4%uD558%uACE0%uC790%20%uD558%uB294%20Token%20%uC744%20%uBCF4%uAD00%0A%09-%20%uC81C%uCD9C%20%uB41C%20Transaction%20%uC2E4%uD589%20%uC694%uAC74%20%uC9C0%uC815%20%28n%20of%20m%20%uAC1C%uC758%20%uC804%uC790%uC11C%uBA85%20%uC694%uAD6C%uC640%20%uAC19%uC740%29%0A%09-%20%uC804%uC790%uC11C%uBA85%20%uC8FC%uCCB4%uAC00%20%uB418%uB294%20Wallet%20Owner%20%uB4E4%uC758%20%uB4F1%uB85D%20%uBC0F%20%uAD00%uB9AC%0A%09-%20Transaction%20%uC81C%uCD9C%20%uC54C%uB9BC%0A%09-%20%uC694%uAC74%uC744%20%uB9CC%uC871%uD55C%20%uACBD%uC6B0%20Transaction%20%uC758%20%uC2E4%uC81C%20%uC2E4%uD589%0A%0A%3E%uC774%uC678%uC5D0%uB3C4%20Wallet%20%uC571%uC744%20%uAC1C%uBC1C%uD558%uACE0%20%uC11C%uBE44%uC2A4%20%uD558%uB294%20%uD68C%uC0AC%uC758%20%uACBD%uC6B0%2C%20%uC544%uBB34%uB098%20%uC790%uC2E0%uB4E4%uC774%20%uC6B4%uC601%uD558%uB294%20Node%20%uC5D0%20%uC218%uB9CE%uC740%20Transaction%20%uC744%20%uB0A0%uB824%20DoS%20Attack%20%uC744%20%uD558%uAC70%uB098%20%uBD80%uD558%uB97C%20%uC77C%uC73C%uD0A4%uC9C0%20%uC54A%uB3C4%uB85D%20%uD558%uACE0%20%uBD80%uAC00%uC801%uC778%20%uC11C%uBE44%uC2A4%uB97C%20%uC81C%uACF5%uD558%uAE30%uC704%uD55C%20%uBAA9%uC801%uC73C%uB85C%20Wallet%20Service%20Gateway%20%uB97C%20%uB458%20%uC218%uB3C4%20%uC788%uACA0%uC9C0%uB9CC%20Offchain%20%uC2DC%uC2A4%uD15C%uC740%20%uBAA8%uB450%20%uC0DD%uB7B5%uD558%uC600%uB2E4%0A%0A%uC704%20%uAD6C%uC131%uC694%uC18C%uC758%20%uC124%uBA85%uC744%20%uBCF4%uBA74%20%uC54C%uACA0%uC9C0%uB9CC%20%uD575%uC2EC%uC740%20**Multisig%20Wallet%20Contract**%20%uC774%uB2E4.%20Multisig%20Wallet%uC758%20%uBAA8%uB4E0%20%uD575%uC2EC%20%uAE30%uB2A5%uC740%20%uC774%20Contract%20%uC5D0%uC11C%20%uC774%uB8E8%uC5B4%uC9C4%uB2E4.%20%uC608%uC804%uC5D0%20%uBB38%uC81C%uAC00%20%uB41C%20Parity%20%uC758%20Multisig%20Wallet%20%uB3C4%20%uBB3C%uB860%20Smart%20Contract%20%uC774%uB2E4.%20%0A%0A%23%23%23%20%uD750%uB984%0A%uC704%20Multisig%20Wallet%20Contract%20%uB97C%20%uC0AC%uC6A9%uD558%uB294%20%uD750%uB984%uC744%20%uBCF4%uBA74%20%uAC04%uB2E8%uD558%uB2E4%20%uD558%uC9C0%uB9CC%20%uC774%uC804%20%uAE00%uC5D0%uC11C%uB294%20%uB2E4%uB8E8%uC9C0%20%uC54A%uC558%uB358%20%uC0C8%uB85C%uC6B4%20%uC694%uC18C%uAC00%20%uD558%uB098%20%uB4F1%uC7A5%uD55C%uB2E4%0A1.%20**submitTransaction**%20%0AsubmitTranaction%28%29%20%uC744%20%uC2E4%uD589%uD558%uAE30%20%uC704%uD55C%20Message%20Transaction%20%uC758%20Parameter%20%uB97C%20%uC774%uC6A9%uD558%uC5EC%20%uC2E4%uC81C%20Token%28Ether%29%20%uC744%20%uBC1B%uC744%20%uC8FC%uC18C%uB97C%20%uB123%uC5B4%uC900%uB2E4%0A%0A%20%uC774%uB54C%2C%20Token%20%uC744%20%uBC1B%uC744%20%uB300%uC0C1%uC774%20%uB2E4%uB978%20Smart%20Contract%20%uC774%uACE0%20Transaction%20%uC885%uB958%uAC00%20Message%20Transaction%20%uC778%20%uACBD%uC6B0%2C%20submitTransaction%28%29%20%uC758%20%uD30C%uB77C%uBBF8%uD130%20%uC911%20%uD558%uB098%uC5D0%20**%uC2E4%uD589%uD574%uC57C%20%uD558%uB294%20Smart%20Contract%20%uC758**%20Method%20%uC640%20%uD30C%uB77C%uBBF8%uD130%uB97C%20%uD3EC%uD568%uD558%uB294%20**Data%20Payload**%20%uB97C%20%uB123%uC5B4%uC900%uB2E4%20%28web3%20%uC758%20.getData%28%29%20%uC0AC%uC6A9%29%20%0A%0A%20%uCD94%uAC00%uC801%uC73C%uB85C%2C%20%uC608%uC758%uC0C1%20submitTransaction%28%29%20%uC774%20%uB418%uBA74%20Event%20%uB85C%20transaction%20%uC774%20submit%20%uB418%uC5C8%uB2E4%uACE0%20%uC54C%uB824%uC8FC%uB294%20%uC13C%uC2A4%20%uC815%uB3C4%uB294%20%uC124%uBA85%uD558%uC9C0%20%uC54A%uC544%uB3C4%20%uAD6C%uD604%20%uB418%uC5B4%uC57C%20%uD55C%uB2E4%uACE0%20%uB290%uB08C%uC774%20%uC62C%20%uAC83%uC774%uB2E4%0A%0A%3E%20%uC774%uBD80%uBD84%uC740%20%uAD6C%uD604%20%uBD80%uBD84%uC5D0%uC11C%20%uC124%uBA85%uD558%uACA0%uB2E4.%20%uD5A5%uD6C4%20CALL%2C%20CALLCODE%2C%20DELEGATECALL%20%uACFC%20%uAD00%uB828%20%uC788%uB294%20%uBD80%uBD84%uC774%uB2C8%20%uADF8%uB54C%20%uB610%20%uC124%uBA85%20%uD558%uACA0%uB2E4%20%28%uC74C..%20%uC624%uB79C%uB9CC%uC774%20%uC2DC%uC791%uD558%uB824%uB2C8%20%uC124%uBA85%uD560%uAC8C%20%uC0B0%uB354%uBBF8%uAC19%uB2E4..%29%0A%0A%0A2.%20**confirmTransaction**%0A%uC704%20submitTransaction%28%29%20%uC73C%uB85C%20%uC81C%uCD9C%20%uB41C%20Transaction%20%uC744%20**%uC2B9%uC778**%20%uD558%uB294%20%uB2E8%uACC4%uC774%uB2E4.%20Contract%20%uC5D0%20%uB4F1%uB85D%uB41C%20%uC2B9%uC778%20%uAD8C%uD55C%uC774%20%uC788%uB294%20EOA%20%uAC00%20confirmTransaction%28%29%20%uC744%20%uD1B5%uD574%20confirm%20%uD574%uC8FC%uBA74%20%uB41C%uB2E4.%20%uC774%uB54C%2C%20%uAC01%20confirm%20%uC2DC%20%uB9C8%uB2E4%20%uB4F1%uB85D%uB41C%20%uC870%uAC74%28%uCD5C%uC18C%20n%20%uAC1C%uC758%20confirm%20%uD544%uC694%29%uC744%20%uB9CC%uC871%uD558%uB294%20confirm%20%uC744%20%uBC1B%uC558%uB294%uC9C0%20check%20%uD55C%uB2E4%0A%0A3.%20**executeTransaction**%0AconfirmTransaction%28%29%20%uC2E4%uD589%20%uC2DC%20%uB9CC%uC871%uD558%uB294%20confirm%20%uC218%uAC00%20%uCC44%uC6CC%uC84C%uC73C%uBA74%20submitTransaction%28%29%20%uC2DC%uC5D0%20%uC81C%uCD9C%20%uB41C%20token%20%uC758%20%uC591%20%uB9CC%uD07C%uC744%20%uC6D0%uB798%20%uBCF4%uB0B4%uACE0%uC790%20%uD588%uB358%20%uC8FC%uC18C%uB85C%20%uBCF4%uB0B4%uC8FC%uB3C4%uB85D%20Transaction%20%uC758%20value%20%uAC12%uC744%20%uCC44%uC6B0%uBA70%2C%20submitTransaction%28%29%20%uB2E8%uACC4%uC5D0%uC11C%20%uC81C%uCD9C%20%uB41C%20Message%20Transaction%20%uC774%20%uC788%uC5C8%uB2E4%uBA74%20**Wallet%20Contract%20%uAC00%28msg.sender%20%3D%3D%20Wallet%20Contract%29**%20%uD574%uB2F9%20Message%20Transaction%20%uC744%20%uC2E4%uD589%uD55C%uB2E4%0A%0A%23%23%23%20Multisig%20%uC778%uB370%2C%20%uC11C%uBA85%uC740%20%uC5B8%uC81C%uD558%uB294%uAC00%3F%0A%uC804%uC5D0%20Multisig%20Wallet%20%uC5D0%20%uB300%uD574%20%uCC28%uBD84%uD788%20%uC124%uBA85%20%uD574%uC8FC%uACE0%20%uB098%uC11C%20%uB4E4%uC5C8%uB358%20%uC9C8%uBB38%uC774%20%uC788%uC5C8%uB2E4.%20**%22%uADF8%uB7F0%uB370%20%uB2E4%uB978%uC0AC%uB78C%uB4E4%28EOA%29%uC774%20%uC804%uC790%uC11C%uBA85%uC740%20%uC5B8%uC81C%20%uD574%uC918%uC694%3F%22**%20%uC804%uC790%uC11C%uBA85%uC740%20%uC774%uBBF8%20Smart%20Contract%20%uB97C%20%uC2E4%uD589%uD558%uB294%20submitTransaction%28%29%2C%20confirmTransaction%28%29%20%uB2E8%uACC4%uC5D0%uC11C%20Message%20Transaction%20%uC744%20%uBCF4%uB0B4%uAE30%20%uC704%uD574%20Raw%20Transaction%20%uC5D0%20%uB300%uACE0%20%uB2E4%20%uD588%uB2E4.%20%uADF8%uB798%uC57C%20Transaction%20%uC774%20submit%20%uB418%uC5C8%uC9C0%20%uC54A%uACA0%uB294%uAC00..%uC694..%20%uB77C%uACE0%20%uB2F5%uC744%20%uD574%uC92C%uB358%20%uAE30%uC5B5%uC774%20%uB09C%uB2E4.%0A%0A%28%uB2E8%2C%20Smart%20Contract%20%uC774%20internal%20call%20%uC744%20%uD558%uB294%20%uAD6C%uAC04%uC5D0%uB294%20%uC804%uC790%uC11C%uBA85%uC774%20%uB2F9%uC5F0%uD788%20%uC5C6%uB2E4.%20EOA%20%uC5D0%uC11C%20%uC774%uBBF8%20%uD588%uC9C0%uC54A%uC740%uAC00.%20Smart%20Contract%20%uB294%20%uC11C%uBA85%uD560%20%uC218%20%uC788%uB294%20%uB188%uC774%20%uC544%uB2C8%uB2E4.%20Smart%20Contract%20%uC744%20%uC2E4%uD589%uD55C%20%uB188%uC774%20%uC774%uBBF8%20%uC804%uC790%uC11C%uBA85%uC744%20%uD574%uC11C%20Message%20Transaction%20%uC744%20%uBCF4%uB0B8%20%uAC83%uC774%uB2E4%29%0A%0A%uC774%uB984%uC774%20%uBB38%uC81C%uB2E4.%20Multisig..%20%uC0AC%uC2E4%20confirmTransaction%28%29%20%uB2E8%uACC4%uC5D0%uC11C%20%uD30C%uB77C%uBBF8%uD130%uB85C%20%uBA54%uC2DC%uC9C0%uC640%20%uC804%uC790%uC11C%uBA85%uAC12%20r%2Cs%2Cv%20%uB97C%20%uB123%uC5B4%uC904%20%uC218%uB3C4%20%uC788%uB2E4.%20%uADF8%uB7EC%uB098%20%uB2E4%uB978%20EOA%20%uC758%20%uC804%uC790%uC11C%uBA85%uC744%20%uC804%uB2EC%uD558%uB294%20%uC0C1%uD669%uC774%20%uC544%uB2C8%uACE0%20**confirmTransaction%28%29%20%uC744%20%uC2E4%uD589%uD558%uB294%20%uC8FC%uCCB4%20%uC790%uCCB4%uAC00%20%uC2B9%uC778%20%uAD8C%uD55C%uC744%20%uAC00%uC9C4%20EOA%20%uC774%uBBC0%uB85C%20%uC774%uBBF8%20transaction%20%uB0B4%uC5D0%20%uB4E4%uC5B4%uC788%uB294%20%uC804%uC790%uC11C%uBA85%uC744%20Multisig%20Wallet%20Contract%20%uC758%20%uD30C%uB77C%uBBF8%uD130%uB85C%20%uBCF4%uB0BC%20%uC774%uC720%uAC00%20%uC5C6%uB294%20%uAC83**%uC774%uB2E4%0A%0A%21%5BAlt%20text%5D%28./1543506496329.png%29%0A%0A%0A%23%23%20%uB9C8%uCE58%uBA70%0A%uC624%uB79C%uB9CC%uC5D0%20%uC62C%uB9AC%uB294%20%uAE00%20%uCE58%uACE0%uB294%20%uB9E4%uC6B0%20%uAE30%uBCF8%uC801%uC778%20%uC8FC%uC81C%uB97C%20%uC62C%uB824%uBCF8%uB2E4.%20%uC0AC%uC2E4%200xProtocol%2C%20Plasma%2C%20Raiden%2C%20ERC20%20Token%20%uAE30%uBC18%uC73C%uB85C%20%uB3CC%uC544%uAC00%uB294%20dApp%20%uB9CC%uB4E4%uAE30%2C%20plasma-mvp%20...%20%uB610%uB294%20Enterprise%20Blockchain%2C%20Quorum%20%uB4F1%uB4F1%20%uBB34%uC5C7%uBD80%uD130%20%uC2DC%uC791%uD560%uAE4C%uB97C%20%uB9CE%uC774%20%uACE0%uBBFC%uD574%uBCF4%uC558%uB2E4.%0A%0A%uADF8%uB9AC%uACE0%20%uC774%uC804%uC5D0%20%uC62C%uB838%uB358%20%uAE00%uB4E4%uC744%20%uB2E4%uC2DC%20%uD6D1%uC5B4%uBCF4%uB2E4%uAC00%2C%20%uBE14%uB85C%uADF8%uC758%20%uD750%uB984%uC774%20%uAC11%uC790%uAE30%20%uB04A%uAE30%uB294%uAC83%20%uBCF4%uB2E4%uB294%20%uC774%uC804%uC758%20Context%20%uB97C%20%uC774%uC5B4%uB098%uC544%uAC00%uBA74%uC11C%20%uC880%uB354%20%uBE60%uB974%uAC8C%20%uC9C4%uD589%uD574%uBCF4%uB294%20%uAC83%uC73C%uB85C%20%uC77C%uB2E8%20%uB9C8%uC74C%uC744%20%uBA39%uC5B4%uBCF8%uB2E4.%20%28%uADF8%uB798%uB3C4%20%uAE30%uBCF8%uC740%20%uAE30%uBCF8%uB300%uB85C%20%uAC00%uACE0%2C%20%uC911%uAC04%uC911%uAC04%20%uBC1C%uD45C%uC790%uB8CC%uB3C4%20%uC880%20%uC62C%uB9AC%uACE0%2C%20%uC774%uB7F0%uC800%uB7F0%20%uAD6C%uD604%20%uC0D8%uD50C%uB4E4%uB3C4%20%uC9EC%uC9EC%uC774%20%uC62C%uB9AC%uACA0%uB2E4%5E%5E%3B%3B%29%0A%0A%uB2E4%uC74C%uC740%20Multisig%20Wallet%20%uAD6C%uD604%20%uC608%uC81C%uB97C%201%uD68C%20%uC815%uB3C4%20%uC62C%uB9AC%uACE0%20%uD035%uD558%uAC8C%20%uB9C8%uBB34%uB9AC%20%uD558%uACE0%20%uB610%20%uADF8%20%uB2E4%uC74C%uC73C%uB85C%20%uB118%uC5B4%uAC00%20%uBCF4%uB3C4%uB85D%20%uD558%uB294%uAC78%20%uBAA9%uD45C%uB85C%20%uD574%uBCF4%uACA0%uB2E4%0A%0A%23%23%20References%0Ahttps%3A//medium.com/haechi-labs/parity-multisig-wallet-%25EB%258F%2599%25EA%25B2%25B0%25EA%25B3%25BC-eip999-4dc303cd8e27%0A%0Ahttps%3A//medium.com/hellogold/ethereum-multi-signature-wallets-77ab926ab63b%0A


반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,