Gibt es eine Möglichkeit, einen Vertrag dynamisch zu erstellen, der auf einen früheren Vertrag verweist?

Ich möchte ein Tracking-System implementieren ... wo ich Ereignisse zwischen zwei Parteien verfolge, die einen Artikel zwischen ihnen liefern ... dann würde der Empfänger ihn an eine andere Person liefern und so weiter ...

Ich möchte für jede Transaktion (zwischen jeweils zwei) gleichzeitig einen Vertrag erstellen, ich möchte immer noch in der Lage sein, die gesamte Kette zu verfolgen ... den Urheber und den vorherigen Vertrag ...

Gibt es eine Möglichkeit, es zu tun?

Antworten (2)

Vorwort : Wenn Sie web3 verwenden möchten, um diese Interaktion zu erstellen, sollte Folgendes funktionieren:

Wenn Sie die Methode für einen konstruierten Vertrag über web3 verwenden .deploy(), sollte sie die Adresse auf receiptund die Instanz selbst auf zurückgeben confirmation.

myContract.deploy({
  data: '0x12345...',
  arguments: [123, 'My String']
})
.send({
  from: '0x1234567890123456789012345678901234567891', // owner address
  gas: 1500000,
  gasPrice: '30000000000000'
}, function(error, transactionHash){ ... })
.on('error', function(error){ ... })
.on('transactionHash', function(transactionHash){ ... })
.on('receipt', function(receipt){
  console.log(receipt.contractAddress) // contains the new contract address
})
.on('confirmation', function(confirmationNumber, receipt){ ... })
.then(function(newContractInstance){
  console.log(newContractInstance.options.address) // instance with the new contract address
})

Quelle: https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#deploy

Lassen Sie uns ein paar konzeptionelle Dinge klären.

Ich möchte für jede Transaktion einen Vertrag erstellen

Nicht sehr wahrscheinlich. Transaktionen sind keine Verträge. Einige Transaktionen setzen Verträge ein, weil dies ihr Zweck ist, und andere Transaktionen interagieren mit Verträgen. Die nächste sinnvolle Assoziation, die mir einfällt, ist ein Vertrag, der Transaktionsdokumente eines bestimmten Typs aufzeichnet. Das könnte ein Vertrag sein, der alle Instanzen einer Klasse behandelt.

Verfolgen Sie Ereignisse zwischen zwei Parteien, die einen Artikel zwischen ihnen liefern

Hier ist die Sprache etwas herausfordernd, da „Ereignisse“ in Ethereum eine sehr spezifische Bedeutung haben, ebenso wie „Transaktion“ und „Vertrag“. Ich werde es so interpretieren, um Verwirrung zu vermeiden:

"Interaktionen zwischen zwei Parteien verfolgen, die an der Lieferung eines Produkts beteiligt sind."

Lassen Sie uns das auspacken.

Produkt: Eine Art physisches Objekt mit einer Darstellung in einem Vertrag. Dies wird wahrscheinlich am besten in einem einzigen Vertrag festgehalten, der Produktinformationen und möglicherweise andere Informationen speichert. Dies wird wahrscheinlich am besten als Zeilen in einer (logischen) Tabelle oder als Instanzen einer Klasse behandelt, wie Sie es bevorzugen. Starten Sie hier: https://medium.com/robhitchens/solidity-crud-part-1-824ffa69509a oder hier: Gibt es gut gelöste und einfache Speichermuster für Solidity?

Parteien, die an der Lieferung beteiligt sind: Dies impliziert, dass es einen Geschäftsprozess mit Schritten gibt, die auf eine bestimmte Weise ablaufen. In Ermangelung einer besseren Beschreibung des Anwendungsfalls, sagen wir, die beiden Parteien müssen sich abmelden, und dann wird das Eigentum übertragen, auch bekannt als Lieferung.

Dieser Prozess (was auch immer es ist) ist genau das, wofür ein Vertrag da ist. Ein Vertrag kann die Produktinformationen, einschließlich des Eigentums, enthalten und einen Prozess durchsetzen, der die Übertragung des Eigentums streng einschränkt.

Verträge können mit anderen Verträgen kommunizieren. So kann der durch den Produktvertrag erzwungene Übertragungsprozess durch eine Abmeldung beispielsweise durch einen Lieferdienst eingeschränkt werden. Denken Sie an zwei "Genehmiger", die den Stein ins Rollen bringen, einige Depotdaten, um das für den nächsten Schritt maßgebliche Lieferunternehmen anzugeben, und eine Lieferbestätigung, die den Eigentumsübergang abschließt.

In einem solchen Szenario gibt es einen einzigen Produktvertrag, den man konsultieren kann, um den Status/Eigentum jeder Produktinstanz und die Geschichte der Dinge, die damit passiert sind, zu erfahren.

Ich hoffe es hilft.