Grin의 거래 설명
편집자 주: 이 기사의 출처는이더리움 애호가편집자 주: 이 기사의 출처는Brandon Arvanaghi이더리움 애호가
(ID: ethfans), 작성자:
, 번역 및 교정: stormpang & Min Min, 허가 하에 게시됨.
편집자 주: Grin은 MimbleWimble 프로토콜을 기반으로 하는 새로운 암호화폐입니다. 이 기사는 MimbleWimble 프로토콜의 트랜잭션이 구성되는 방식과 암호화를 사용하여 양 당사자의 주소와 트랜잭션 금액을 공개하지 않고 통화가 이중 지불되지 않도록 하는 방법을 단계별로 설명하는 자세한 자습서입니다. 통화 소유자는 통화를 사용할 수 있습니다.
이 기사는 Grin 트랜잭션의 작동 원리를 공유하고 모든 사람이 Grin 트랜잭션이 실제로 어떻게 작동하는지 이해하도록 돕는 것을 목표로 합니다.

Grin 트랜잭션의 출력은 다음 형식을 취하는 Pederson 약속입니다.
이미지 설명
- Grin 출력은 Pedersen 약속입니다. -
Perdersen 약속은 정보를 숨기는 좋은 방법입니다. Perdersen Commitment라는 개념을 처음 듣는다면, 단어를 볼 때마다 "차폐된 가치"라는 개념을 생각해 보십시오.
다음 텍스트는 Grin의 위키(Grin 트랜잭션 작동 방식을 이해하기 위한 최고의 입문서)에서 가져온 것입니다.
개인 키로 매우 큰 수 k를 선택하고 해당 공개 키로 k * H를 선택한다고 가정합니다. 누군가가 공개키 k * H의 값을 안다고 해도 그것으로부터 k의 값을 유추하는 것은 거의 불가능하다...
r은 눈가림 요인으로 사용되는 개인 키이고, G는 타원 곡선의 고정점이며, 그들의 곱 r * G는 이 곡선에서 r의 공개 키입니다.
v는 입력 또는 출력 값이고, H는 타원 곡선의 또 다른 고정점입니다...
개인키 k와 개인키 j를 알면 (k+j) * H = k * H + j * H, 즉 두 개인키의 합에 고정 소수점 H(( k+j) * H) )는 두 개의 개인 키에 고정 소수점 H를 각각 곱하여 생성된 두 개의 공개 키의 합 k * H + j * H와 같습니다.
암호화에 대한 보다 심층적인 연구를 위해 ECC 입문서 블로그를 읽을 수 있습니다. 즉, Grin 출력을 사용하려면 블라인드 팩터(r)와 Grin 거래 금액(v)을 모두 알아야 합니다. 이 두 값은 약속을 깨서 거꾸로 추론할 수 없습니다. 따라서 이러한 값을 미리 알고 있는 경우에만 Grin의 출력을 사용할 수 있습니다.
이 출력에 블라인드 팩터 20을 사용하여 40 Grin이 포함되어 있다고 가정해 보겠습니다.

(막간: 전송된 Grin의 실제 수는 원자 단위 1 NanoGrin의 정수배입니다. 여기에서는 단순화를 위해 Grin의 정수를 예로 사용합니다.)
- 이 출력에서 blinding factor는 20이고 grins의 수는 40입니다. -

Grin 브라우저에서 Grin 트랜잭션의 출력을 보면 실제 출력이 위의 그림과 같이 명확한 공식을 통해 제시되지 않음을 알 수 있습니다. Grin 출력의 실제 모습은 다음과 같습니다.
-Grin 출력("커밋" 열에서). -
다시 말하지만, 이 출력에서 "20"(눈부신 요인) 또는 "40"(Grin의 양)을 추론하는 것은 불가능합니다.
보조 제목
방금 언급한 출력이 Alice에 속한다고 가정합니다. 이제 Alice는 이 40개의 Grin 중 25개를 Bob에게 보내려고 합니다. 간단하게 하기 위해 채굴자에 대한 거래 수수료는 무시하겠습니다.

5달러짜리 지폐가 있고 3달러짜리 물건을 사면 거스름돈으로 2달러를 받습니다. 이것이 Bitcoin 시스템의 거래가 작동하는 방식이며 Grin도 예외는 아닙니다. Alice가 사용하지 않은 트랜잭션 출력 40 Grin에서 25 Grin을 가져와 Bob에게 보내려면 이 트랜잭션에서 사용하지 않은 새 트랜잭션 출력을 생성하고 나머지 15 Grin(변경)을 자신의 주소로 반환합니다.
이미지 설명
이 거래에서 15 Grin은 Alice에게 돌아가며, 이는 그녀만이 15 Grin을 다시 제어하고 사용할 수 있음을 의미합니다. 즉, 밥이 앨리스의 거스름돈을 사용하는 것은 불가능해야 합니다. 이를 위해 Alice는 자신의 변경 출력에 대한 새로운 블라인드 요소를 생성해야 합니다. Alice가 34를 선택했다고 가정합니다.

r(변경 출력의 블라인드 팩터)과 v(변경할 Grin의 양)를 모두 알고 있는 Alice는 변경 출력(co)을 생성하는 데 필요한 모든 정보를 가지고 있으며, 이는 블록체인에 출력으로 기록됩니다. 우수한. Alice가 Bob에게 보내려는 25 Grin 출력도 마찬가지입니다.
이미지 설명
앞에서 언급했듯이 출력은 사용하는 블라인드 요소를 알고 있는 경우에만 사용할 수 있습니다. 앨리스는 자신이 지출하고자 하는 출력의 블라인드 팩터(20)를 알고 있지만 그녀가 알고 있는 Grin 시스템의 다른 사람에게 증명할 방법이 필요합니다.

그렇기 때문에 총 눈부신 요인을 해결하는 완전히 별도의 계산을 만들어야 합니다. 이는 Alice가 변경 출력에 대해 방금 생성한 눈부신 요인(34)에서 지출하고자 하는 출력의 눈부신 요인(20)을 뺀 값입니다.
이미지 설명
- 앨리스의 눈부신 요인의 총 수. -
rs(s는 발신자, 즉 Alice를 의미)는 Alice의 blinding 요인의 총 수를 나타내며 이 예에서는 14입니다. (막간: 의도적으로 커널 오프셋을 생략했습니다.)"Alice는 다음 정보를 Bob에게 보냅니다. 사실 Grin 데이터는 "메타데이터"와

데이터(Data)" 필드가 있지만 명확성을 위해 이 문서에서는 의도적으로 두 가지를 구분합니다.
이미지 설명
-Grin 거래의 첫 번째 단계에서 앨리스가 밥에게 보내야 하는 모든 정보. -
메타데이터 필드:
보낼 양: Grin Alice가 Bob에게 보내고자 하는 양(이 예에서는 25).
트랜잭션 고유 ID(TX UUID): 이 트랜잭션을 식별하기 위해 데이터를 주고 받을 때 Alice와 Bob이 사용하는 고유 식별자입니다.
거래 수수료(TX 수수료): 거래 수수료(이 자습서에서는 논의하지 않음).
잠금 높이(lock_height): 트랜잭션이 적용되는 블록 번호입니다.
데이터(데이터) 필드:
트랜잭션 입력(TX 입력): Alice는 Bob에게 전송된 트랜잭션에 대한 입력으로 사용되지 않은 단일 또는 여러 출력을 사용합니다.
변경 출력(co): Alice의 변경 출력
ks • G: Alice의 nonce ks에 생성 포인트 G를 곱하고 얻은 값이 이 nonce의 Pedersen 확약입니다.
rs • G: Alice의 총 블라인드 팩터 rs에 생성 포인트 G를 곱하고 얻은 값이 이 rs의 Pedersen 확약입니다.
밥의 행동

Alice가 보낸 정보를 받은 후 Bob은 두 변수 TX fee와 lock_height를 연결하여 M(트랜잭션의 "메시지")을 생성합니다.
이미지 설명
Bob은 Alice로부터 받을 25 Grin에 대해 블라인드 팩터 rr을 선택합니다(r은 수신자, 즉 Bob을 나타냄). 그가 11을 선택했다고 가정합니다. 동시에 그는 자신의 임의의 nonce kr(r은 수신자를 나타냄)도 선택합니다.

Alice의 연산과 동일하게 Bob은 두 값 rr과 kr에 각각 생성기 점 G를 곱하여 Pedersen 확약을 생성합니다. 이러한 데이터를 사용하여 Bob은 변수 e로 표시되는 이 트랜잭션에 해당하는 Schnorr 챌린지를 생성할 수 있습니다.
이미지 설명
- 거래 슈노르 도전. -
Schnorr 챌린지 SHA256은 다음 정보를 순서대로 해시합니다.
거래 소식.
Bob(그의 25 Grin 출력에 대해 선택된) 블라인드 팩터에 대한 약정과 Alice의 총 블라인딩 팩터 약정의 합계입니다.

Bob은 sr(r은 수신자를 나타냄)인 e를 통해 거래에 대한 자신의 Schnoor 서명을 생성합니다. sr은 Bob의 전체 서명이지만 궁극적으로 Alice의 부분 서명과 결합되어 전체 트랜잭션의 서명을 생성하기 때문에 Bob의 부분 서명이라고 합니다.
- 트랜잭션에 대한 Bob의 부분 서명. -

Alice가 마침내 sr을 받았을 때 kr 또는 rr의 실제 값을 추론할 방법이 없습니다. Bob은 Alice에게 다음을 보냅니다.
이미지 설명
- Bob은 자신의 부분 서명, nonce에 해당하는 commit, 25 Grin의 blinding factor에 해당하는 commit을 Alice에게 보냅니다. -
순서대로 전송되는 콘텐츠에는 다음이 포함됩니다.
sr: Bob의 부분 서명.
kr • G: Bob이 선택한 nonce에 해당하는 커밋입니다.
rr • G: Bob이 받게 될 블라인드 팩터 25 Grin에 해당하는 커밋입니다.
Alice는 이제 e를 계산하는 데 필요한 모든 것과 이 트랜잭션에 대한 Schnorr 챌린지를 가지고 있습니다. 로컬에서 e를 계산한 후 Alice는 Bob의 부분 서명을 확인할 수 있습니다.

기억하시겠지만 Bob의 부분 서명 sr은 다음과 같이 구성됩니다.
- 트랜잭션에 대한 Bob의 부분 서명. -

앞에서 설명한 타원 곡선의 속성을 기반으로 앨리스가 방정식의 양변에 생성기 점 G를 곱한 후에도 방정식은 여전히 유지됩니다.
이미지 설명
- Alice는 방정식의 양변에 생성점 G를 곱합니다. -
Alice는 이미 Bob으로부터 kr•G(Bob이 선택한 nonce에 해당하는 커밋) 및 rr•G(Bob이 받을 블라인드 팩터 25 Grin에 해당하는 커밋)를 받고 로컬에서 주어진 e를 계산했기 때문에 그녀는 확인할 수 있습니다. sr에 생성기 점 G를 단순히 곱하여 Bob의 부분 서명이 방정식의 오른쪽에 있는 값과 동일하도록 합니다.
위의 작업을 수행함으로써 Alice는 다음을 증명할 수 있습니다.
Bob은 그가 받을 Grin의 양을 알고 있습니다(25).
Bob은 자신의 논스 값을 알고 있습니다.
...이 시점에서 Alice는 Bob이 선택한 nonce 및 blinding factor를 알지 못한 채 Bob의 부분 서명을 확인했습니다.

그런 다음 Alice는 자신의 부분 서명을 생성합니다.
이미지 설명

-거래에 대한 Alice의 부분 서명. -
Alice는 이제 자신과 Bob의 부분 서명이 포함된 트랜잭션에 대한 서명을 생성할 수 있습니다.
트랜잭션 서명은 Alice와 Bob의 부분 서명의 합과 각각의 nonce에 해당하는 커밋의 합으로 구성됩니다.
순서대로 서명에는 다음이 포함됩니다.
Alice와 Bob의 nonce에 해당하는 약정의 합계(둘 중 누구도 상대방의 nonce 값을 알지 못함).

병합 후 트랜잭션 서명은 다음과 같이 표현할 수 있습니다.
이미지 설명
-거래 서명-
그 중 s = ss + sr, k = ks + kr이다.
이 서명을 기억하십시오. 곧 의미를 알게 될 것입니다.
거래 완료
디지털 통화에는 "메모리"가 필요합니다. 즉, 한 사람에게 돈을 보내면 다른 사람에게 같은 돈을 보낼 수 없습니다. Grin을 사용하여 Grin이 보내는 양과 받는 사람을 숨깁니다. 그렇다면 이 돈이 "이중 지출"되지 않았거나 허공에서 만들어지지 않았다는 것을 어떻게 증명할 수 있습니까?
Grin 트랜잭션에서 입력에서 모든 출력을 뺀 후 남은 Grin의 양은 0과 같아야 합니다. 다시 $5 지폐를 예로 들어 보겠습니다.
(34•G) + (15•H) + (11•G) + (25•H) - (20•G) - (40•H) = (25•G) + (0•H)
출납원에게 $3(출력) + $2 거스름돈(출력) - $5 지폐(입력) = 0
마찬가지로 합법적인 Grin 트랜잭션도 위의 방정식을 충족합니다. 그렇다면 실제 값을 노출하지 않고 어떻게 확인할 수 있습니까? Alice와 Bob 사이의 트랜잭션의 입력과 출력을 살펴보겠습니다.
Grin 트랜잭션의 출력 합계에서 입력 합계를 뺀 값이 유효한 타원 곡선 공개 키를 생성하는 경우 v 값을 취소해야 한다는 것을 알고 있습니다. 방정식의 우변이 알려진 값 n에 대해 n•G + 0•H 형식이 아닌 경우 거래가 불법임을 알 수 있습니다. 이는 총 산출량이 총 투입량보다 크거나(예: 귀하가 $5를 지불하고 계산원이 $3을 받고 대신 $10을 제공함) 총 투입량이 총 산출량보다 크다는 것을 의미합니다(예: 귀하가 $5를 지불하고 계산원은 $3을 받습니다). ,하지만 돈을주지 않습니다).

위에 그려진 서명을 기억하십니까?
이미지 설명
이 서명은 실제로 내가 방금 언급한 과도한 눈부신 요소에 해당하는 약속에 서명합니다. 이에 대해서는 아래에서 설명합니다.

Bob의 부분 서명에 대한 방정식의 양쪽에 G를 곱하면 다음 방정식을 얻습니다.
-점 G를 생성한 후 방정식의 양쪽에 Bob의 부분 서명을 곱합니다-

마찬가지로 Alice의 부분 서명 방정식의 양변에 G를 곱하면 다음 방정식을 얻을 수 있습니다.
이미지 설명
sr•G + ss•G = (kr • G) + (ks • G) + (e • (rr•G + rs•G))
- 방정식의 양변에 점 G를 생성한 후 Alice의 부분 서명을 곱합니다. -
두 식을 합치면 어떻게 될까요? 당신은 얻을 것이다:
여기서 rr은 Bob의 블라인드 인수이고 rs는 앨리스의 블라인드 인수의 총 수이며 rr•G + rs•G는 (rr + rs)•G와 같습니다.
sr•G + ss•G = (k•G) + (e • (r•G))
Bob의 블라인드 팩터는 11•G의 약속에 해당합니다. 앨리스의 총 블라인드 팩터는 약정 14•G에 해당하며, 두 개를 더해 25•G를 얻습니다(전체 트랜잭션의 초과 블라인딩 팩터 약정을 나타냄). 따라서 sr(Bob의 부분 서명)과 ss(Alice의 부분 서명)의 합이 초과 블라인드 요인에 해당하는 약정과 같으면 전체 트랜잭션이 합법적임을 증명할 수 있습니다.
sr•G + ss•G = (k•G) + (e • (25•G))
이 방정식을 더 단순화하면 다음을 얻습니다.
또는:
그런 다음 방정식의 양쪽이 같은지 확인하면 됩니다.
등식의 모든 변수(부분 서명의 합계, e의 일부, 과도한 눈가림 요인에 대한 약정, 논스 합계에 대한 약정)는 모든 사람이 볼 수 있으므로 누구나 확인할 수 있습니다. 앨리스의 블라인드 팩터나 밥의 블라인드 팩터를 몰라도 거래를 검증할 수 있습니다. 그들의 부분 서명을 추가하고 합계가 초과 블라인드 팩터에 해당하는 약정과 동일한지 확인함으로써 다음을 증명할 수 있습니다.
Alice와 Bob이 트랜잭션을 생성할 때 둘 다 각자의 출력에 대한 블라인드 팩터를 알고 있습니다. 이는 출력이 잠기지 않도록 트랜잭션에서 생성된 새 출력을 사용할 수 있음을 의미합니다.
트랜잭션을 확인하기 위해 방금 사용한 정보는 트랜잭션 커널에 배치됩니다.
보조 제목
트랜잭션 커널
출력 외에도 트랜잭션 커널은 Grin 트랜잭션에서 생성된 정보의 또 다른 부분입니다. 각 트랜잭션은 트랜잭션 커널을 생성하지만 Grin 블록체인에서 출력을 쿼리하여 연결된 트랜잭션 커널을 찾을 수 없습니다. 모든 Grin 트랜잭션에는 트랜잭션 커널이 포함되어 있으며 과도한 Grin이 허공에서 생성되지 않았다는 증거가 있습니다.
다음 정보가 트랜잭션 커널에 저장됩니다.
거래 수수료(거래 수수료) 및 잠금 높이(lock_height). (간간히: Coinbase 트랜잭션인 경우 이 두 부분의 정보는 포함되지 않습니다.)
요약하다
보조 제목
요약하다
이러한 모든 작업 후에는 다음 트랜잭션 관련 정보만 네트워크에 브로드캐스트됩니다.
입력이 소비되었습니다.
새로 생성된 출력입니다.
트랜잭션 코어.
커널 오프셋(여기서는 설명하지 않음).







