Teks ini menjelaskan abstraksi sistem kepercayaan, yang memungkinkan Anda untuk mengintegrasikan layanan escrow ke dalam bidang hubungan ekonomi apa pun.
Menyimpan dana adalah bagian mendasar dari setiap transaksi. Jika rekanan tidak mengetahui informasi yang dapat dipercaya tentang satu sama lain, maka risiko penipuan meningkat. Pendekatan ini memungkinkan Anda memprogram dalam model desentralisasi jaringan desentralisasi, model untuk melakukan transaksi otomatis, transaksi aman, dll. Selain itu, model sistem kepercayaan seperti itu terbuka. Semua transaksi yang dilakukan dengan partisipasi dari hierarki dompet multi-langganan memungkinkan kami untuk memverifikasi peringkat rekanan dan juga melindungi diri dari skema penipuan peserta baru dalam hubungan ekonomi.
Isi
1
Pendahuluan2
Deskripsi dompet multi-tanda tangan3
Cara untuk membangun hierarki dompet4
antarmuka hierarki dompet multi-hari5
Aliran Interaksi5.1
Alur interaksi standar5.2
Alur Interaksi yang Aman5.3
Aliran interaksi yang kontroversial6
Protokol ESCB97
Integrasi sistem kepercayaan dan kontrak pintar yang mengimplementasikan protokol ESCB98
Contoh kontrak yang menerapkan ESCB98.1
Kontrak pintar untuk pasar sewa pribadi, mengikuti contoh AirBnb8.2
Kontrak pintar untuk menukar cryptocurrency dengan uang fiat dan kembali dalam mode desentralisasi9
node arbitrase10
Kamus1. Pendahuluan
Masalah utama untuk layanan escrow adalah penciptaan hubungan saling percaya antara semua peserta. Selain itu, para peserta itu sendiri tidak harus diketahui setiap subjek hubungan. Untuk meringkas semua kasus, kami akan mempertimbangkan bahwa semuanya adalah anonim. Untuk sistem hubungan saling percaya seperti itu, penting untuk mengatur hubungan peserta baru dengan yang lama. Peserta lama sudah memiliki peringkat tertentu dalam sistem hubungan dan dengan demikian menyebabkan lebih percaya diri. Karena tidak ada yang tahu siapa pun dalam sistem kepercayaan, ini menyebabkan masalah dengan verifikasi peringkat sebelumnya. Dokumen ini menjelaskan sistem kepercayaan berdasarkan kripto-dompet multi-berlangganan. Sistem seperti itu dapat diprogram menjadi kontrak yang cerdas. Mengingat distribusi luas platform Ethereum, kami akan memilih platform ini sebagai platform untuk menggambarkan semua kontrak pintar dalam dokumen ini.
2. Deskripsi dompet multi-tanda tangan
Abstraksi yang memungkinkan Anda untuk mengkonfirmasi atau membatalkan transaksi hanya jika konsensus dicapai antara peserta yang berwenang untuk membuat keputusan seperti itu disebut dompet multi-tanda tangan. Transaksi dalam konteks ini adalah operasi atom yang diprogram untuk mengeksekusi metode dalam kontrak pintar lain atau yang sama.
Antarmuka untuk kontrak Smart dari abstraksi tersebut dapat direpresentasikan sebagai:
- konstruktor menerima alamat anggota pendiri dan jumlah konfirmasi minimum yang diperlukan untuk transaksi
constructor(address[]:members, uint256:requiredConfirmationCount)
- Antarmuka Peserta Resmi
- mendapatkan daftar peserta
static getMembers() -> address[]:address
- lihat alamat anggota
static getMember(uint256:indexNumber) -> address:address
- verifikasi alamat untuk keanggotaan
static isMember(address:address) -> bool:value
- mendapatkan jumlah peserta maksimum untuk dompet
static getMaxMemberCount() -> uint256:value
- Konfirmasi Konsensus Minimum
static getRequiredConfirmationCount() -> uint256:value
- acara penambahan anggota baru
event MemberAddition() -> address:member
- acara penghapusan anggota
event MemberRemoval() -> address:member
- mengubah acara diperlukan jumlah konfirmasi untuk dieksekusi
event RequiredConfirmationCountChange() -> uint256:count
- tambahkan anggota
execute addMember(address:member) -> void:value
- penghapusan anggota
execute removeMember(address:member) -> void:value
- penggantian anggota
execute replaceMember(address:currentMember, address:newMember) -> void:value
- perubahan dalam jumlah konfirmasi wajib untuk eksekusi
execute changeRequiredConfirmationCount(uint256:count) -> void:value
- Antarmuka Transaksi
- verifikasi konfirmasi transaksi di alamat peserta
static getConfirmationByAddress(uint256:indexNumber, address:addressMember) -> bool:value
- mendapatkan informasi dari suatu transaksi
static getTransactionInfo(uint256:indexNumber) -> [address:destination, uint256:value, bytes:data, bool:executed]
- mendapatkan jumlah total transaksi dalam dompet ini
static getTransactionCount() -> uint256:value
- menerima status konfirmasi transaksi
static isConfirmed(uint256:transactionId) -> bool:value
- menerima jumlah konfirmasi
static getConfirmationCount(uint256:transactionId) -> uint256:count
- mendapatkan jumlah transaksi berdasarkan jenis
static getTransactionCount(bool:pending, bool:executed) -> uint256:count
- mendapatkan daftar peserta yang mengkonfirmasi transaksi
static getConfirmations(uint256:transactionId) -> address[]:confirmations
- mendapatkan daftar id transaksi berdasarkan jenis dalam periode waktu tertentu
static getTransactionIds(uint256:from, uint256:to, bool:pending, bool:executed) -> uint256[]:transactionIds
- acara konfirmasi transaksi pihak
event Confirmation() -> [address:sender, uint256:transactionId, uint256:timeStamp]
- konfirmasi penarikan peserta sebelum transaksi
event Revocation() -> [address:sender, uint256:transactionId, uint256:timeStamp]
- transaksi antrian menambah acara
event Submission() -> [uint256:transactionId]
- acara pelaksanaan transaksi
event Execution() -> [uint256:transactionId]
- peristiwa kesalahan transaksi
event ExecutionFailure -> [uint256:transactionId]
- acara pengisian dompet
event Deposit -> [address:sender, uint256:amount]
- anggota menambahkan transaksi
execute submitTransaction(address:destination, uint256:value, bytes:data) -> uint256:transactionId
- konfirmasi transaksi oleh peserta
execute confirmTransaction(uint256:transactionId) -> void:value
- penarikan konfirmasi oleh peserta
execute revokeConfirmation(uint256:transactionId) -> void:value
- transaksi manual
execute executeTransaction(uint256:transactionId) -> void:value
3 Cara untuk membangun hierarki dompet
Ada dua cara utama untuk membangun sistem kepercayaan. Vertikal dan horizontal. Cara horizontal bangunan menyiratkan pembuatan daftar dompet anak oleh satu orang tua utama. Cara vertikal bangunan menyiratkan rantai yang terdiri dari dompet anak dengan referensi ke orang tua. Dalam hal ini, dompet orang tua mungkin anak dari dompet orang tua lain.
Seperti yang kita lihat jalur konstruksi horizontal mungkin merupakan subspesies dari jalur konstruksi vertikal. Karena itu, lebih jauh kita membiarkan pendekatan ini tanpa pengawasan.
4 antarmuka hierarki dompet multi-hari
Untuk membangun sistem kepercayaan, perlu untuk memperluas antarmuka sederhana dari dompet multi-berlangganan yang dijelaskan di atas, menambahkan mekanisme untuk mengatur hierarki dan eksekusi otomatis konfirmasi, serta kemungkinan eksekusi yang ditangguhkan.
- Konstruktor menerima alamat dompet induk, alamat anggota pendiri, jumlah konfirmasi minimum yang diperlukan untuk transaksi, waktu standar untuk konfirmasi otomatis dalam hitungan detik
constructor(address:parent, address[]:members, uint256:requiredConfirmationCount, uint256:standardTimeAutoConfirmation)
- Antarmuka Anggota
- mendapatkan daftar peserta
static getMembers() -> address[]:address
- berfungsi untuk melihat alamat peserta
static getMember(uint256:indexNumber) -> address:address
- verifikasi alamat untuk keanggotaan
static isMember(address:address) -> bool:value
- mendapatkan jumlah maksimum peserta dompet
static getMaxMemberCount() -> uint256:value
- Konfirmasi Konsensus Minimum
static getRequiredConfirmationCount() -> uint256:value
- acara penambahan anggota baru
event memberAddition() -> address:member
- acara penghapusan anggota
event memberRemoval() -> address:member
- mengubah acara diperlukan jumlah konfirmasi untuk dieksekusi
event requiredConfirmationCountChange() -> uint256:count
- tambahkan anggota
execute addMember(address:member) -> void:value
- penghapusan anggota
execute removeMember(address:member) -> void:value
- penggantian anggota
execute replaceMember(address:currentMember, address:newMember) -> void:value
- perubahan dalam jumlah konfirmasi wajib untuk eksekusi
execute changeRequiredConfirmationCount(uint256:count) -> void:value
- Antarmuka Hierarki
- mendapatkan daftar dompet anak
static getChildren() -> address[]:wallets
- periksa apakah alamat dompet adalah anak dari yang sekarang
static isChild() -> bool:value
- Memeriksa apakah alamat dompet parental ke yang saat ini dilakukan melalui isChild dengan membandingkannya.
- acara pemasangan dompet afiliasi
event childAttachment() -> [address:address,uint256:timeStamp]
- acara penghapusan dompet anak
event childRemoval() -> [address:address,uint256:timeStamp]
- membubuhkan dompet anak
execute attachChild(addres:child) -> void:value
- hapus dompet anak
execute removeChild(address:address) -> void:value
- ubah satu dompet anak ke yang lain
execute replaceChild(address:newAddress) -> void:value
- Antarmuka Transaksi
- periksa status transaksi
static getTransactionStatus(uint256:transactionId) -> enum:{submitted,completed,frozen,disputed,reverted}
- memeriksa status transaksi untuk kepatuhan
static isTransactionStatus(uint256:transactionId, uint256:enumStatusNumber) -> bool:value
- verifikasi konfirmasi transaksi di alamat peserta
static getConfirmationByAddress(uint256:transactionId, address:addressMember) -> bool:value
- mendapatkan informasi dari suatu transaksi
static getTransactionInfo(uint256:transactionId) -> [address:destination, uint256:value, bytes:data, bool:executed]
- mendapatkan jumlah total transaksi di dompet
static getTransactionCount() -> uint256:value
- menerima status konfirmasi transaksi
static isConfirmed(uint256:transactionId) -> bool:value
- menerima jumlah konfirmasi
static getConfirmationCount(uint256:transactionId) -> uint256:count
- mendapatkan jumlah transaksi berdasarkan jenis
static getTransactionCount(bool:pending, bool:executed) -> uint256:count
- mendapatkan daftar peserta yang mengkonfirmasi transaksi
static getConfirmations(uint256:transactionId) -> address[]:confirmations
- mendapatkan waktu untuk konfirmasi otomatis
static getTimeAutoConfirmation(uint256:transactionId) -> uint256:timestamp
- mendapatkan daftar id transaksi berdasarkan jenis dalam periode waktu tertentu
static getTransactionIds(uint256:from, uint256:to, bool:pending, bool:executed) -> uint256[]:transactionIds
- acara konfirmasi transaksi pihak
event Confirmation() -> [address:sender, uint256:transactionId, uint256:timeStamp]
- acara konfirmasi transaksi otomatis
event AutoConfirmation() -> [uint256:transactionId, uint256:timeStamp]
- konfirmasi penarikan peserta sebelum transaksi
event Revocation() -> [address:sender, uint256:transactionId, uint256:timeStamp]
- transaksi antrian menambah acara
event Submission() -> [uint256:transactionId]
- acara pelaksanaan transaksi
event Execution() -> [uint256:transactionId]
- peristiwa kesalahan transaksi
event ExecutionFailure -> [uint256:transactionId]
- perubahan status transaksi menjadi peristiwa beku
event TransactionFrozen -> [uint256:transactionId]
- status transaksi berubah menjadi peristiwa kontroversial
event TransactionDisputed -> [uint256:transactionId]
- perubahan status transaksi ke acara yang dikembalikan
event TransactionReverted -> [uint256:transactionId]
- acara pengisian dompet
event Deposit -> [address:sender, uint256:amount]
- tambahkan transaksi untuk dieksekusi
execute submitTransaction(address:destination, uint256:value, uint256:TimeAutoConfirmation, bytes:data) -> uint256:transactionId
- konfirmasi transaksi
execute confirmTransaction(uint256:transactionId) -> void:value
- konfirmasi pencabutan
execute revokeConfirmation(uint256:transactionId) -> void:value
- ubah status transaksi menjadi beku
execute setTransactionStatus(uint256:transactionId, uint256:enumStatusNumber) -> void:value
- transaksi manual
execute executeTransaction(uint256:transactionId) -> void:value
- Manajemen Peringkat
- memperoleh peringkat di
static getRatingByAddress(address:agent) -> [uint256:negativeRating, uint256:positiveRating, uint256:countRatingRecords]
- mendapatkan riwayat peringkat berdasarkan alamat dan nomor seri
static getRatingRecordForAddress(address:agent, uint256:indexNumber) -> void:value
- acara menambahkan catatan ke peringkat di
event RatingRecordAdded -> [address:author, address:agent, bytes32:smartContractAddress, bool:positiveOrNegative, uin256:ratingNumber, bytes:comment, uint256:indexNumber]
- tambahkan catatan ke peringkat untuk alamat
execute addRatingRecord(address:agent, bytes32:smartContractAddress, bool:positiveOrNegative, uin256:ratingNumber, bytes:comment) -> void:value
- Integrasi dengan protokol ESCB9
- memeriksa di alamat apakah kontrak pintar yang melekat pada dompet ini adalah kontrak pintar dengan implementasi ESCB9
static isAttachedESCB9SmartContract(address:smartContract) -> bool:result
- memeriksa status setoran untuk kontrak pintar dengan ESCB9 yang terlampir pada dompet ini
static getDepositStatusForESCB9SmartContract(address:smartContract) -> enum:{awaiting,founded,returned}
- acara melampirkan kontrak pintar dengan implementasi dompet ESCB9
event AttachingESCB9SmartContract -> [address:smartContract]
- acara deposit untuk kontrak pintar dengan implementasi terlampir dompet ESCB9
event ConfirmationForDepositESCB9SmartContract -> [address:smartContract, uint256:sum, bytes:notice]
- melampirkan kontrak pintar dengan implementasi ESCB9 ke dompet
execute attachESCB9SmartContract(address:smartContract) -> void:value
- konfirmasi deposit untuk kontrak pintar dengan implementasi ESCB9. Jika setoran ada di sistem eksternal, maka pemberitahuan itu akan memiliki label. Jika setoran dalam ETH, maka jumlah setoran dikirim ketika metode dijalankan.
execute fundDepositForESCB9SmartContract(address:smartContract, uint256:sum, bytes:notice) -> void:value
5 Aliran Interaksi
Setiap kontrak pintar dapat diintegrasikan ke dalam hierarki dompet multi-tanda tangan. Integrasi semacam itu akan memiliki aliran interaksi. Secara umum, kami membedakan beberapa jenis aliran:
- Standar Dalam formulir ini, transaksi terjadi secara otomatis. Tanpa partisipasi anggota resmi hierarki dompet
- Terlindungi . Dalam formulir ini, waktu transaksi dapat ditingkatkan dari standar untuk konfirmasi waktu secara otomatis hingga yang diperlukan. Dalam hal ini, partisipasi anggota resmi hierarki dompet diperlukan.
- Kontroversial . Dalam formulir ini, peserta transaksi dapat membekukan transaksi. Dalam hal ini, partisipasi anggota resmi hierarki dompet diperlukan untuk membangun konsensus.
Setiap dompet dalam sistem kepercayaan memiliki sejumlah peserta yang berkuasa penuh, yang mengeluarkan putusan. Untuk alasan sederhana, kami akan menggabungkan semua peserta yang berwenang dalam dompet ke dalam satu konsep -
wasit .
5.1 Alur interaksi standar
Untuk kesederhanaan presentasi, kami membawa konsep barang dan jasa ke konsep objek transfer (objek), dan konsep uang fiat, cryptocurrency dengan konsep sarana transfer (berarti).
Counterparty, pemilik objek membuat kesepakatan dengan counterparty, pemilik dana, untuk tujuan pertukaran. Dalam hal ini, pemilik objek membuat kontrak escrow pintar dengan mengirimkan transaksi terstandarisasi ke salah satu dompet resmi dalam hierarki dompet multi-tanda tangan. Dalam hal ini, transaksi didaftarkan oleh pihak ketiga sebagai sistem kepercayaan. Untuk setiap transaksi, waktu standar untuk pelaksanaannya ditentukan. Rekanan, pemilik dana melakukan setoran pada transaksi dengan mentransfer dana ke sistem kepercayaan. Setelah itu, pemilik objek mentransfer objek ke pemilik dana. Pemilik dana memeriksa kualitas objek. Jika sebelum akhir waktu transaksi, ia tidak mengkonfirmasi kualitas, maka dana ditransfer ke pemilik objek dalam transaksi. Kedua rekanan saling memberikan peringkat kenyamanan. Dengan demikian, pemilik dana dapat mengubah aliran interaksi sebelum akhir transaksi. Setelah transfer dana kepada pemilik objek, pemilik dana dapat mengajukan permohonan ke dompet yang lebih tinggi di tingkat hierarki untuk menyelesaikan perselisihan dalam waktu yang ditentukan oleh peraturan. Setelah waktu ini, peringkat untuk transaksi diterapkan ke kedua belah pihak dan transaksi menjadi tidak dapat dibatalkan.
5.2 Alur Interaksi yang Aman
Jika, untuk beberapa alasan di luar kendali rekanan, batas waktu transaksi harus diperpanjang, maka, dengan persetujuan para pihak, dompet hierarki multi-tanda tangan (arbiter) dapat mengubah waktu yang diberikan untuk transaksi. Setelah mengubah waktu, aliran interaksi yang dialokasikan untuk transaksi kembali ke tingkat logika aliran standar.
5.3 Aliran interaksi yang kontroversial
Jika kualitas objek selama transaksi tidak sesuai dengan rekanan, pemilik dana yang ia kontribusikan ke sistem kepercayaan hierarki dompet multi-tanda tangan, transaksi dapat dibekukan. Dalam hal ini, deposit tidak ditransfer ke rekanan, pemilik objek sampai putusan transaksi dikeluarkan. Pemegang dana harus memberikan bukti substansial kepada arbiter transaksi. Setelah itu, arbiter mengeluarkan putusan yang mendukung salah satu rekanan. Jika ada pihak yang melakukan transaksi tidak puas dengan putusan, itu berubah menjadi dompet yang lebih tinggi dalam urutan hierarki dompet multi-tanda tangan. Setelah melewati semua instance hierarki, salah satu pihak dapat meminta pemungutan suara publik. Ukuran luar biasa ini hanya dapat diberikan oleh dompet absolut.
6 Protokol ESCB9
Contoh protokol ESCB9 dalam Solidity sebagai kontrak pintar abstrak (protokol sedang dikembangkan dan dapat berubah)
contract ESCB9 { modifier onlyArbitrage() { require(msg.sender == arbitrage()); _; } modifier isDeposited { uint i; bytes memory _funcName = bytes4(keccak256("getDepositStatusForESCB9SmartContract(address)")); bytes memory _concat = new bytes(_funcName.length + 32); for(i=0; i < address(this).length; i++) { _concat[i] = address(this)[i]; } require(arbitrage().call.value(0)(_concat) == 1);
7 Integrasi sistem kepercayaan dan kontrak pintar yang mengimplementasikan protokol ESCB9
Untuk menggunakan sistem kepercayaan hierarki dompet multi-tanda tangan di proyek Anda sendiri, Anda perlu membuat kontrak pintar yang menerapkan standar ESCB9 dan melampirkan kontrak pintar seperti itu ke salah satu arbiter yang tidak memiliki dompet tambahan. Dompet seperti itu dalam hierarki multi-langganan disebut "input node". Semua dompet multi-signature hulu disebut sebagai "node arbitrase".
8 Contoh kontrak yang menerapkan ESCB9
8.1 Kontrak pintar untuk pasar sewa pribadi, mengikuti contoh AirBnb
8.2 Kontrak pintar untuk menukar cryptocurrency dengan uang fiat dan kembali dalam mode desentralisasi
Contoh dari kontrak Smart yang dijelaskan di bawah ini memungkinkan Anda untuk menukar BTC dengan uang fiat secara langsung, tanpa partisipasi dari penukar dan layanan pihak ketiga. Penjual BTC mentransfer jumlah dalam kontrak pintar ke deposit dalam blockchain BTC. Pembeli, setelah mengkonfirmasi setoran oleh arbiter, secara otomatis mentransfer jumlah yang ditentukan dalam kontrak ke rekening atau nomor kartu plastik yang termasuk dalam kontrak. Arbiter dapat melakukan intervensi dalam proses transaksi setelah banding dari salah satu peserta. Awalnya, deposit akan dibekukan dan jika para pihak tidak setuju dengan konsensus, maka kontrak tersebut akan menjadi diperdebatkan dengan resolusi lebih lanjut tentang aliran interaksi yang disengketakan.
9 node arbitrase
Untuk mempertahankan kerja sistem kepercayaan, hierarki dompet multi-tanda tangan diperkenalkan. Node arbitrase, yaitu dompet dalam hierarki yang memiliki dompet tambahan di bawahnya, bertindak sebagai penjamin penyelesaian sengketa. Berkuasa penuh untuk node tersebut hanya dapat ditunjuk oleh hierarki superior. Setiap peserta yang berwenang menerima hadiah dengan membagikan dividen dan bonus untuk bekerja dengan arus interaksi yang disengketakan. Ukuran bonus ditentukan oleh konsensus.
Untuk mendapatkan status peserta yang berwenang dalam simpul arbitrase, perlu memiliki jumlah token yang ditentukan secara konsensus di alamat peserta yang berwenang.
Dengan demikian, penerimaan dividen yang stabil oleh semua peserta dari node arbitrase dijamin. Semakin tinggi hierarki dompet multi-tanda tangan, token yang lebih diperlukan harus ada di alamat peserta yang berwenang.10 Kamus
Ethereum adalah teknologi sumber terbuka yang memungkinkan Anda untuk membuat rantai transaksi yang terdesentralisasi dan tidak berubah. Setiap transaksi dapat dilakukan dengan kondisi tertentu yang dicatat dalam kontrak pintar.Kontrak pintar - ditulis dalam Solidity, logika yang dieksekusi di mesin virtual Ethereum, yang memungkinkan Anda untuk memperluas logika transaksi.Dompet multi-tanda tangan (arbiter) adalah kontrak pintar khusus yang dikendalikan oleh sekelompok peserta yang berwenang yang dapat mengkonfirmasi atau membatalkan transaksi. Dengan menggunakan mekanisme dompet multi-berlangganan, Anda dapat membuat rantai gateway untuk transaksi dan memantau eksekusi atau pengembalian dana tepat waktu.Pemilik objek - adalah pemilik, pemasok, pengembang produk perangkat lunak, dll. Yaitu, orang yang menjual objek dan akhirnya menerima deposit sebagai hadiah.Pemilik dana - adalah penyewa, pembeli, pelanggan produk perangkat lunak, dll. Yaitu, orang yang menaruh deposit pada objek untuk membeli produk atau layanan.