Erstellen Sie eine dezentrale Kredit-App mit Compound – ICOVO


Ich erinnere mich an die Aufregung, als ich zum ersten Mal die Idee von AirBnB hörte. Menschen teilen ungenutzten Raum mit Reisenden, die eine Unterkunft benötigen.

Jetzt bin ich in der Kryptoindustrie genauso aufgeregt. Mit dem Compound-Protokoll können wir nicht verwendete Krypto-Assets an Kreditnehmer weitergeben, die diese gut nutzen können. Der Compound ist das Krypto-Äquivalent von AirBnB, mit dem Kreditgeber nahezu risikofrei bis zu 10% verdienen können.

Das Ziel dieses Beitrags ist es, eine einfache Anwendung zu erstellen, die Sai ausleiht und sie mit Interessen zurückzieht. Den fertigen Code sehen Sie hier.

Bevor wir mit dem Codieren beginnen, beschreibe ich zunächst die Grundlagen des Compounds. Dann spielen wir mit einigen intelligenten Verträgen in Etherscan, die in unserem Code aufgerufen werden.

Hinweis: MakerDAO gab bekannt, dass sie den alten Single Collateral Dai nennen Sai und der neue Multi-Collateral Dai Dai. Daher nenne ich in diesem Beitrag das alte Single Collateral Dai Sai.

Compound ist ein dezentrales Ausleihprotokoll in der Ethereum-Blockchain. Jeder auf der ganzen Welt kann am Protokoll teilnehmen.

Sie schaffen einen Zinsmarkt für Ethereum-Token und Äther. Seit dem 20. November 2019 gibt es sieben Märkte:

Für jeden Markt gibt es einen eigenen Kreditvertrag. Als Kreditgeber können Sie Vermögenswerte zu ihrem intelligenten Vertrag liefern und Interessen verdienen. Als Kreditnehmer können Sie Vermögenswerte aus den im Smart-Vertrag reservierten Vermögenswerten ausleihen, indem Sie einige Sicherheiten hinterlegen und Zinsen zahlen.

Weder ein Kreditgeber noch ein Kreditnehmer müssen Zinssätze angeben. Der Zinssatz wird automatisch von den Marktkräften bestimmt. Wenn die Nachfrage nach einer Kreditaufnahme gering ist, ist der Zinssatz niedrig. Umgekehrt ist der Zinssatz hoch, wenn die Nachfrage nach Krediten für einen Vermögenswert hoch ist. Dazu später mehr.

Auch muss weder ein Kreditgeber noch ein Kreditnehmer eine Laufzeit angeben. Wie bereits erwähnt, schreibt das Protokoll vor, dass die Kreditnehmer übermäßige Sicherheiten stellen müssen, um das Risiko eines Zahlungsausfalls des Kreditnehmers zu vermeiden. Genau wie bei MakerDAO unterliegen ihre Sicherheiten der Liquidation, wenn der Preis einen bestimmten Betrag unterschreitet.

Herkömmlicherweise müssen Sie Kreditgeber und Kreditnehmer abgleichen und dann Konditionen wie Zinssatz, Sicherheiten und Fälligkeit aushandeln. Der Compound reduziert die Kosten für die Koordination von Kreditgebern und Kreditnehmern über ihr Reservesystem und reduziert die Verhandlungskosten über ihren automatischen Zinsmechanismus, vordefinierte Sicherheitenarten und ein laufzeitfreies Modell. Infolgedessen können Personen Tokens viel einfacher und schneller ausleihen.

Die Zinssätze ändern sich dynamisch, indem sie der in den einzelnen Märkten verfügbaren Liquidität folgen und sich je nach Angebot und Nachfrage in jedem Block ändern. Je weniger Liquidität vorhanden ist, desto höher sind die Zinssätze. Je mehr Liquidität vorhanden ist, desto niedriger sind die Zinssätze.

Wenn Sie sich das zusammengesetzte Dashboard ansehen, können Sie feststellen, dass die Zinssätze (auch als jährliche Prozentsätze bezeichnet) schwanken. Sie können die Inanspruchnahme auch auf die in jedem Markt verfügbare Liquidität überprüfen (siehe das Beispiel von Sai unten). Die Auslastungsquote ist der Prozentsatz des Gesamtvermögens, der an Kreditnehmer aus dem Liquiditätspool ausgeliehen wird. Wenn die Auslastung wäre 90%, 10% von Sai ist für Abhebungen verfügbar. Wenn also die Nutzungsrate hoch ist, ist der Jahreszins hoch. Wenn die Nutzungsrate niedrig ist, ist der effektive Jahreszins niedrig.

Wie gewinnen Kreditgeber Interessen ab? Sehen wir uns eine Transaktion an, bei der jemand Sai an den Compound Smart-Vertrag liefert. In dieser Transaktion können Sie sehen, dass sie liefert 7600 Sai. Sie können auch sehen, dass sie herumkommt 361,487 cSai im Austausch.

* Ignorieren Sie den USD-Wert. Es ist falsch.

cSai ist ein ERC20-Token, der Ihren Kontostand einschließlich des Sai-Werts und der aufgelaufenen Zinsen darstellt. In Compound ist das Sammeln von Zinsen so einfach wie das Halten dieses cSai.

Der Wert von cSai nimmt mit der Zeit zu, da er bei jedem Ethereum-Block Interesse aufwirft. Wenn Sie Sai zurückziehen möchten, tauschen Sie es einfach mit Ihrem cSai aus (cSai ist an diesem Punkt verbrannt). Dann kannst du deinen Sai mit Interessen zurückbekommen.

cSai ist eines der in Compound vorhandenen cTokens. Jeder Markt hat seinen eigenen cToken wie cSai, cEth, cBat usw.

Mit ERC20-konformen Methoden und anderen Methoden in cToken-Verträgen können Benutzer Vermögenswerte bereitstellen, entziehen, ausleihen, ausleihen, übertragen usw.

Lassen Sie uns als Nächstes mit intelligenten Verträgen in Etherscan spielen, um einige Funktionen zu verstehen, die wir entwickeln werden.

Wir werden einige Transaktionen mit MetaMask senden. Du brauchst ein bisschen Mainnet ETH und Sai. Wenn Sie etwas Eth, aber keinen Sai haben, gehen Sie zu Uniswap, um etwas zu holen.

Es gibt drei Schritte, um Sai zuzuführen und dann abzuziehen.

1. die Genehmigungsfunktion

Gehen Sie zur Sai-Token-Vertragsseite von Etherscan. Klicken Sie auf „Mit Web3 verbinden“ und melden Sie sich bei MetaMask an. Jetzt können Sie Transaktionen mit MetaMask senden.

Bevor Sie Sai liefern können, müssen Sie zuerst den cSai-Vertrag genehmigen, um auf Ihr Sai-Guthaben zugreifen zu können. Gehen Sie zu den Registerkarten "Vertrag schreiben". Scrollen Sie nach unten zur Genehmigungsfunktion. Geben Sie die Menge an Sai an, die Sie genehmigen möchten.

Stellen Sie sicher, dass Sie achtzehn 0s geben. Die Mathematik in Solidity ist ein Fixpunkt, und der Sai-Vertrag gibt Dezimalstellen als an 18.

Wenn Sie also 1Sai genehmigen möchten, müssen Sie Folgendes bestehen:

1000000000000000000
// 1 * 10 ** 18

Klicken Sie auf die Schaltfläche Schreiben und senden Sie eine Transaktion. Warten Sie, bis Ihre Transaktion abgebaut wurde. Fügen Sie mehr Gas hinzu, wenn es zu langsam ist.

Jetzt sollte der cSai-Vertrag die Genehmigung haben, 1 Sai für Sie zu übertragen.

2. die Münzfunktion

Wechseln Sie anschließend zur Vertrags-Seite von cSai smart. Klicken Sie auf "Mit Web3 verbinden" und melden Sie sich erneut bei MetaMask an.

Wenn Sie Ihren Sai mit der Münzfunktion in den cSai-Vertrag aufnehmen, können Sie einige geprägte cSai-Token zurückerhalten.

Funktion mint (uint mintAmount) gibt (uint) zurück

Geben Sie die Menge an Sai an, die Sie in der Münzfunktion bereitstellen möchten.

Klicken Sie auf die Schaltfläche Schreiben und senden Sie eine Transaktion.

Sie sollten in der Lage sein zu sehen, dass 1Sai subtrahiert und etwas cSai von / zu Ihrem Konto hinzugefügt wird.

3. die Funktion redeemUnderlying

Es gibt zwei Möglichkeiten, Ihren Sai zurückzuziehen. Sie können die Anzahl der Sai oder die Anzahl der cSai angeben, die mit Sai ausgetauscht werden sollen.

Die Funktion redeemUnderlying nimmt den Betrag von Sai als Argument. Die Einlösungsfunktion nimmt den Betrag von cSai auf. Der Einfachheit halber verwenden wir hier die Funktion redeemUnderlying:

Funktion redeemUnderlying (uint redeemAmount) gibt (uint) zurück

Geben Sie den Betrag von Sai an, den Sie in der Funktion "Rückzahlung" abheben möchten:

Klicken Sie auf die Schaltfläche Schreiben und senden Sie eine Transaktion.

Sie können sehen, dass Sie cSai zurückgegeben und stattdessen Sai erhalten haben.

Sie sollten auch in der Lage sein zu sehen, dass sich noch eine kleine Menge cSai in Ihrem Konto befindet. Das ist das Interesse, das Sie angesammelt haben.

Nun gut, fangen wir mit unserer Anwendung an. Wir werden wieder eine einfache JavaScript-Anwendung erstellen, die Sai ausleiht und zurückzieht. Sie können dieses Repository für den fertigen Code sehen.

Beziehen Sie Ihren privaten Schlüssel und Ihre Adresse
Beziehen Sie zunächst Ihren privaten Schlüssel und Ihre Adresse in vanity-eth. Klicken Sie unten auf die Schaltfläche "Generieren". Bewahren Sie sie vorerst irgendwo auf. Bitte verwenden Sie sie NICHT anders als zu Testzwecken. Es ist nicht sicher.

Holen Sie sich etwas Eth und Sai
Schicken Sie Eth und Sai an die Adresse, die Sie gerade erhalten haben. 0,01 Eth sollte ausreichen, um das Benzin zu bezahlen. Ich werde nur liefern 1 Sai in diesem Beitrag.

* Wir werden mainnet cSai verwenden, da es leider schwierig ist, Testnet Sai-Token zu bekommen.

Holen Sie sich den Infura Endpoint
Wir werden Infura als Anbieter verwenden, um mit dem Ethereum-Netzwerk zu kommunizieren. Erstellen Sie ein Infura-Konto, und erstellen Sie ein neues Projekt, um den Endpunkt bei Mainnet zu erhalten. Es sollte ungefähr so ​​aussehen:

https://mainnet.infura.io/v3/[PROJECT_ID]

Starten Sie ein neues npm-Projekt

mkdir eht-compound-demo
cd eht-compound-demo /
npm init --yes

* Wenn Sie keine npm und nodejs haben, installieren Sie diese von hier aus.

Git initialisieren

Git Init

Installieren Sie das web3-Paket

npm i - save web3@1.2.1

web3 ist die Ethereum JavaScript API. Es ist eine Schnittstelle zu Ethereum-Netzwerken. Es kommuniziert mit einem Ethereum-Knoten oder führt Transaktionen mit intelligenten Verträgen durch, die in der Blockchain Ihrer JavaScript-Anwendung bereitgestellt werden.

Installieren Sie das Paket ethereumjs-tx

npm i --save ethereumjs-tx@1.3.7

Wir gebrauchen ethereumjs-tx Transaktionen erstellen und signieren.

Fügen Sie Skripte zu package.json hinzu

"Skripte": {
"Approve-sai-main": "node - experimental-modules ./approveSaiMain.mjs",
"Supply-sai-main": "node - experimental-modules ./supplySaiMain.mjs",
"Draw-sai-main ":" node - experimental-modules ./withdrawSaiMain.mjs "
},

mjs ist eine Dateierweiterung, mit der Sie mit ES6-Syntax schreiben können.

Erstellen Sie die Dateien saiTokenContract.mjs und cSaiContract.mjs
Sie können die Dateien einfach von hier und hier kopieren.

In diesen Dateien deklariere und exportiere ich einfach den abi und die Adresse des sai-Token-Vertrags und des cSai-Vertrags.

Jetzt werden wir anfangen, Code zu schreiben. Beginnen wir mit einem Ausleihfeature.

Wir werden zwei separate Dateien erstellen:

1. approveSaiMain.mjs

Erstellen Sie eine neue Datei
Erstellen Sie eine neue Datei approveSaiMain.mjs.

Pakete importieren

importiere Web3 von "web3";
importiere EthTx von "ethereumjs-tx";

Einführen cSaiContract und saiTokenContract

Importieren Sie cSaiContract von "./cSaiContract".
Importieren Sie saiTokenContract von "./saiTokenContract".

Richten Sie Web3 ein
Richten Sie Web3 so ein, dass Infura als Ihr Web3-Anbieter verwendet wird:

const web3 = new Web3 (
neuer Web3.providers.HttpProvider ("https://mainnet.infura.io/v3/[YOUR_PROJECT_ID]"
)
);

Deklarieren Sie Ihre Adress- und privaten Schlüsselvariablen

const addressFrom = “[YOUR_ADDRESS]”;
const privKey = “[YOUR_PRIVATE_KEY]”;

Instanziiere den Sai Token Vertrag
Sie verwenden die Vertrag Methode von web3 mit der Adresse und abi, um den Sai-Token-Vertrag zu instanziieren.

const saiTokenContractInstance = new web3.eth.Contract (
JSON.parse (saiTokenContract.saiTokenContractAbi),
saiTokenContract.saiTokenContractAddress
);

Jetzt können wir die Sai-Token-Vertragsmethoden aufrufen.

Deklarieren Sie Const-Variablen, die an die approve-Funktion übergeben werden sollen

const ADDRESS_SPENDER = cSaiContract.cSaiContractAddress;
const TOKENS = web3.utils.toHex (-1);

Du kannst passieren 1 * 10 ** 18 zum zweiten Argument der Genehmigungsfunktion, aber in der Praxis ist es eine übliche Konvention, -1 damit Ihre Benutzer nie wieder genehmigen müssen. Wenn Sie verstehen möchten, wie dies funktioniert, lesen Sie dies.

Codieren Sie den Abi für die Genehmigungsfunktion

const approveEncodedABI = saiTokenContractInstance.methods
.approve (ADDRESS_SPENDER, TOKENS)
.encodeABI ();

Deklarieren Sie die sendSignedTx-Funktion
Erstellen Sie eine Funktion zum Signieren eines Transaktionsobjekts und geben Sie diese an ein Ethereum-Netzwerk weiter:

Funktion sendSignedTx (transactionObject, cb) {
let transaction = new EthTx (transactionObject);
const privateKey = new Buffer.from (privKey, "hex");
transaction.sign (privateKey);
const serializedEthTx = transaction.serialize (). toString ("hex");
web3.eth.sendSignedTransaction (`0x $ {serializedEthTx}`, cb);
}

Erstellen Sie ein Transaktionsobjekt und führen Sie dann sendSignedTx aus

web3.eth.getTransactionCount (addressFrom) .then (transactionNonce => {
const transactionObject = {
chainId: 1,
nonce: web3.utils.toHex (transactionNonce),
gasLimit: web3.utils.toHex (100000),
gasPrice: web3.utils.toHex (5000000000),
an: saiTokenContract.saiTokenContractAddress,
von: addressFrom,
data: approveEncodedABI
};
sendSignedTx (transactionObject, function (error, result) {
if (error) return console.log ("error ===>", error);
console.log ("sent ===>", result);
})
}
);

Stellen Sie die gasLimit bis 100000. Sie können ändern Gaspreis wenn Sie weniger bezahlen möchten. Überprüfen Sie das aktuelle Optimum Gaspreis in EthGasStation. Sie können seine konvertieren gwei Wert auf wei in Ethereum-Einheitenumrechner.

Führen Sie die Datei aus

npm run approve-sai-main

Sobald Sie einen solchen Transaktions-Hash erhalten 0xa18d71767ba95b95831fbf3a441494165002bc5f4104afdb0406511ebce7cbe3können Sie zu Etherscan gehen, um die Details Ihrer Transaktion anzuzeigen. Unten ist meine Transaktion als Beispiel. Wenn Ihre Transaktion nicht erfolgreich ist, erhöhen Sie Ihre Gaspreis und senden Sie eine weitere Transaktion.

Sie können sehen, dass ich die Genehmigungsfunktion unter „Eingabedaten“ aufgerufen habe.

2. supplySaiMain.mjs

Ich erstelle eine andere Datei, supplySaiMain.mjs, und rufe diesmal die Minz-Funktion auf. Ich werde das Detail überspringen, da der größte Teil des Codes gleich sein wird. Sie können den fertigen Code im Repo sehen.

Kodieren Sie das ABI des Minze Funktionieren Sie mit der Menge an Sai, die Sie prägen möchten.

const MINT_AMOUNT = web3.utils.toHex (1 * 10 ** 18);const mintEncodedABI = cSaiContractInstance.methods
.mint (MINT_AMOUNT)
.encodeABI ();

Übergeben Sie diesen ABI an einen Daten Eigenschaft in einem Transaktionsobjekt. Stellen Sie auch die gasLimit zu 200000 diesmal:

web3.eth.getTransactionCount (addressFrom) .then (transactionNonce => {
const transactionObject = {
chainId: 1,
nonce: web3.utils.toHex (transactionNonce),
gasLimit: web3.utils.toHex (200000),
gasPrice: web3.utils.toHex (5000000000),
an: cSaiContract.cSaiContractAddress,
von: addressFrom,
Daten: mintEncodedABI
};
sendSignedTx (transactionObject, function (error, result) {
if (error) return console.log ("error ===>", error);
console.log ("sent ===>", result);
})
}
);

Führen Sie die Datei aus:

npm run supply-sai-main

Sie können sehen, dass 1Sai von Ihrem Konto übertragen wird. Sie können auch sehen, dass Sie einige cSai im Austausch bekommen.

Zuletzt werden wir ein Feature bauen, um Sai zurückzuziehen. Auch hier werde ich das Detail überspringen, da der größte Teil des Codes gleich sein wird. Den fertigen Code sehen Sie hier. Ich mache eine andere Datei, drawSaiMain.mjsund rufen Sie die einlösenBasiswert funktionieren diesmal.

Kodieren Sie das ABI des einlösenBasiswert Funktionieren Sie mit der Menge an Sai, die Sie abheben möchten.

const REDEEM_AMOUNT = web3.utils.toHex (1 * 10 ** 18);const redeemUnderlyingEncodedABI = cSaiContractInstance.methods
.redeemUnderlying (REDEEM_AMOUNT)
.encodeABI ();

Übergeben Sie diesen ABI an einen Daten Eigenschaft in einem Transaktionsobjekt. Stellen Sie auch die gasLimit zu 400000 diesmal:

web3.eth.getTransactionCount (addressFrom) .then (transactionNonce => {
const transactionObject = {
chainId: 1,
nonce: web3.utils.toHex (transactionNonce),
gasLimit: web3.utils.toHex (400000),
gasPrice: web3.utils.toHex (5000000000),
an: cSaiContract.cSaiContractAddress,
von: addressFrom,
data: redeemUnderlyingEncodedABI
};
sendSignedTx (transactionObject, function (error, result) {
if (error) return console.log ("error ===>", error);
console.log ("sent ===>", result);
})
}
);

Führen Sie die Datei aus:

npm rundraw-sai-main

Sie können sehen, dass Sie Ihren 1Sai zurückerhalten und einige cSai an den cSai-Vertrag zurückgeschickt haben.

Wenn Sie Ihr cSai-Guthaben sehen, haben Sie immer noch einen winzigen Betrag. Das ist das Interesse, das Sie angesammelt haben.

Wir haben erfahren, dass der Compound ein dezentrales Leihprotokoll in der Ethereum-Blockchain ist, mit dem jeder auf der Welt Krypto-Assets ohne Erlaubnis ausleihen oder ausleihen kann. Da die Koordinierungs- und Verhandlungskosten entfallen, ist die Verwendung im Vergleich zu anderen vorhandenen p2p-Krypto-Leihsystemen viel einfacher und schneller.

Wir haben auch gelernt, dass das Ausleihen und Zurückziehen in Compound so einfach ist wie das Aufrufen von drei Methoden in intelligenten Verträgen. Sie können diese einfache App in Ihre App oder Brieftasche integrieren, um die Open-Finance-Revolution zu beschleunigen.

Ich hoffe, dass wir jetzt dieselbe Aufregung wie in der Krypto-Sharing-Wirtschaft haben.

Coins Kaufen: Bitcoin.deAnycoinDirektCoinbaseCoinMama (mit Kreditkarte)Paxfull

Handelsplätze / Börsen: Bitcoin.de | KuCoinBinanceBitMexBitpandaeToro

Lending / Zinsen erhalten: Celsius NetworkCoinlend (Bot)

Cloud Mining: HashflareGenesis MiningIQ Mining

Werbung: Immobilienmakler HeidelbergMakler Heidelberg

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close