AZTEC
https://www.youtube.com/watch?v=bNQefZYxVM4&t=2246s
Ceremony
AZTEC: How the Ceremony Works - Basic Version
AZTEC: How the Ceremony Works - Advanced Version
Join Split(transfer)
複数のnote (utxo)をinputに、複数の異なるオーナーに対するnoteをoutputに。
Bilateral swap(trade)
2つのnoteのatomic exchange.
Dividend proof
input note == output * ratioであることを証明。 アセットの利子支払いに有用。
Mint
trusted partyによるaztec note supplysの総量増加
e.g. 銀行送金で受け取った同量のstable coinがaztec noteをmint
Burn
mintと逆
Private range
他のnoteよりも大きいか小さいか証明。assetが法規制の制限量よりも超えていないか。
Public range
publicな値に対して。
stealth address
trusted party to relay: gas支払いを隠す
memo
AZTEC Protocol
Ethereum上でtransferされるtokenの量を第三者に明らかにせずに送信する。
Boneh-Boyen署名を用いたゼロ知識証明。range proofを用いることで効率的にコミットメントを生成する。 -> gas削減。
例えば、dai tokenのbalanceが暗号化され秘匿化されたAZTEC Notesとして表現される。
Public information
commitment:noteが保持するvalueの暗号化表現
note ownerのアドレス
Private information
noteのvalue
noteのviewing key:noteの復号化鍵(spendはできない)
AZTEC protocolにnote regitryが存在し、unspentなnoteのpublic informationをsmart contractが復元可能。
How to spend notes
join-split styleの秘匿トランザクションでnoteはspendされる。
例えば、Aliceが合計で100tokenとなる2つのNotesを持っている状況で、Bobに20tokenを送りたい場合、Aliceは合計20tokenとなるownerがBobの1つ以上のnotesを生成し、合計80tokenとなるownerがAliceの1つ以上のNotesを生成する。
そして、AliceはそのNoteとValueのrelationに対するゼロ知識証明を生成し、AZTECコントラクトがそれを検証する。パスしたら、aliceのinput notesを消し、note registryにoutput notesを生成する。
また、aliceがbobのnoteのviewing keyを生成し、secret-sharing protocolで送るので、aliceがそのviewing keyをbroadcastしたら秘匿トランザクションではなくなる。
(viewing keyにおける送信者へのトラスト性)
input noteのownerを表す署名はゼロ知識証明のハッシュ値。
-> 要は、value<->note relationのゼロ知識証明検証をコントラクトで行い、それぞれのnoteの署名をゼロ知識証明自体のproof hashにしている。
viewing key : noteをdecryptして見れる(spendはできない)
spending key: private key of ethreum
How to get value into note
public commitmentによるnoteからvalue。
ゼロ知識証明でvalue != 0を検証する。
v is negative: confidential note表現でerc20 tokenのカストディアンコントラクトとして作用する
v is positive: notes -> tokensへの変換
what is the cost
range proofsによるcommitment schemeの効率化。
ゼロ知識証明の検証では、3*(input)+4(output)のecmul
eip-1108によるgas効率化
additionalなnotesと一緒に変換することでいくら変換したのか秘匿化。
ethreumアドレスから抽出したmonero-styleのstealth-addressでアドレスを秘匿化。
ゼロvalueなnoteを加え、joint-split txすることの必要性。
楕円曲線上の点のtrusted setup -> zcashライクなpowers of tau
-> A confidential DEX. Confidential wighted voting. anonymous identity sharing schemes.
-> 要は、on-chain scaling with snarksと同じでcontractのdeposit~withdraw間でのやり取りを仮想的に表現している。
Boneh-Boyen signatures and the Strong Diffie-Hellman problem
https://gyazo.com/333eafef9c0bc16fd9b57e8abb16f7fe
Notes
Note registry
createNoteRegistry(address _linkedTokenAddress, uint256 _scalingFactor, bool _canAdjustSupply, bool _canConvert)
_canAdjustSupply: minting or burningによりownerがnoteのstateを変更可能か
_canConvert: _linkedTokenAddressからnoteに変換可能か
if false: the asset is a fully private asset.
scalingFactor: 1 noteに対応するtoken数 (crsにより2^26にnoteが制限)
confidentialTotalMinted:
Note
code:note.js
/**
* Note struct. This is the data that we store when we log AZTEC notes inside a NoteRegistry
*
* Data structured so that the entire struct fits in 1 storage word.
*
* @notice Yul is used to pack and unpack Note structs in storage for efficiency reasons,
* see NoteRegistry.updateInputNotes and NoteRegistry.updateOutputNotes for more details
**/
struct Note {
// status uses the IAZTEC.NoteStatus enum to track the lifecycle of a note.
uint8 status;
// createdOn logs the timestamp of the block that created this note. There are a few
// use cases that require measuring the age of a note, (e.g. interest rate computations).
// These lifetime are relevant on timescales of days/months, the 900-ish seconds that a miner
// can manipulate a timestamp has little effect, but should be considered when utilizing this parameter.
// We store createdOn in 5 bytes of data - just in case this contract is still around in 2038 :)
// This kicks the 'year 2038' problem down the road by about 400 years
uint40 createdOn;
// destroyedOn logs the timestamp of the block that destroys this note in a transaction.
// Default value is 0x0000000000 for notes that have not been spent.
uint40 destroyedOn;
// The owner of the note
address owner;
}
aztec commitment schemeではmerkle proof扱えず
stealth address:
linkabilityが残る
tx同期が必要
stalth addressの利用をプロトコルで強制できないのでununiform