Wie in Truffle docs geschrieben :
Migrationen sind Javascript-Dateien, die Ihnen helfen, Verträge im Ethereum-Netzwerk bereitzustellen. Diese Dateien sind für die Bereitstellung Ihrer Bereitstellungsaufgaben verantwortlich und werden unter der Annahme geschrieben, dass sich Ihre Bereitstellungsanforderungen im Laufe der Zeit ändern werden. Während sich Ihr Projekt weiterentwickelt, erstellen Sie neue Migrationsskripte, um diese Entwicklung in der Blockchain voranzutreiben. Ein Verlauf der zuvor durchgeführten Migrationen wird in der Kette durch einen speziellen Migrationsvertrag aufgezeichnet, der unten detailliert beschrieben wird.
Aber was bedeutet es wirklich? Was sind die Anwendungsfälle von Migrationen?
Ich versuche auch, die Datei Migrations.sol zu verstehen, die im Truffle - Tutorial angegeben ist:
contract Migrations {
address public owner;
uint public last_completed_migration;
modifier restricted() {
if (msg.sender == owner) _
}
function Migrations() {
owner = msg.sender;
}
function setCompleted(uint completed) restricted {
last_completed_migration = completed;
}
function upgrade(address new_address) restricted {
Migrations upgraded = Migrations(new_address);
upgraded.setCompleted(last_completed_migration);
}
}
Der Migrations
Vertrag speichert (in last_completed_migration
) eine Nummer, die dem zuletzt angewendeten „Migrations“-Skript entspricht, das sich im migrations
Ordner befindet. Die Bereitstellung dieses Migrations
Vertrags ist sowieso immer der erste derartige Schritt. Die Nummerierungskonvention ist x_script_name.js
, x
beginnend bei 1
. Ihre Echtfleischverträge würden normalerweise in Skripten beginnend bei 2_...
.
Da dieser Migrations
Vertrag also die Nummer des zuletzt angewendeten Bereitstellungsskripts speichert, führt Truffle diese Skripte nicht erneut aus. Andererseits muss für Ihre App in Zukunft möglicherweise ein geänderter oder neuer Vertrag bereitgestellt werden. Dazu erstellen Sie ein neues Skript mit einer erhöhten Nummer, das die auszuführenden Schritte beschreibt. Dann wiederum, nachdem sie einmal gelaufen sind, werden sie nicht noch einmal laufen.
Und ja, die letzten 2 Zeilen sind wahre Solidity. Sehen Sie sich http://solidity.readthedocs.io/en/latest/contracts.html#creating-contracts inside an contract OwnedToken {
.
Hier ist ein Beispiel für einen echten Anwendungsfall von Truffle-Migrationen.
Ich habe einen Speichervertrag und einen Schnittstellenvertrag. Die Schnittstelle muss wissen, wo sich der Speicher befindet, und der Speicher muss der Schnittstelle Berechtigungen erteilen.
Also stelle ich bei der zweiten Migration (die erste ist für Truffle Housekeeping reserviert) den Speicher bereit:
var MEStorage = artifacts.require("./MEStorage.sol");
module.exports = function(deployer) {
deployer.deploy(MEStorage);
};
Und im dritten erhalte ich die Speicheradresse und die Bereitstellungsschnittstelle mit dieser Adresse als Parameter. Und nachdem ich die Schnittstellenadresse habe, erteile ich ihr Berechtigungen im Speicher:
var MEInterface = artifacts.require("./MEInterface.sol");
var MEStorage = artifacts.require("./MEStorage.sol");
module.exports = function(deployer) {
deployer.deploy(MEInterface, MEStorage.address).then(() => {
MEStorage.deployed().then(storageInstance => {
return storageInstance.setPermissions(MEInterface.address, 2);
// 2 - is FULL access
});
});
};
Hier ist ein Video, das diesen Anwendungsfall erklärt, und ein Artikel über das von mir verwendete Speichermuster .
Migrationen sind eine Reihe von Boilerplates, die Truffle benötigt und die Sie kopieren und einfügen und dann vergessen, dass Sie es jemals getan haben.
zaphod100.10
Xavier Leprêtre B9lab
zaphod100.10
Xavier Leprêtre B9lab
Gor
grandrew
Eduard Pereira
ens
, das eine Art vonDNS
Smart Contracts ist.Siwei
truffle
kommt mitmigration
.Xavier Leprêtre B9lab