Bitte erläutern Sie Anwendungsfälle für die deploy.link()
Funktion bei Migrationen im Truffle-Framework. Wie würden Sie es verwenden und wofür.
BEARBEITEN: Wie im Kommentar von @feihcsim angegeben,
autolink
wurde es abgelehnt
Nehmen wir an, das Ökosystem Ihrer DAPP verfügt über eine Bibliothek und einen Vertrag, der Funktionen aus dieser Bibliothek aufruft. Also hast du:
library Converter {
function weiToEther() returns (uint256) { //return ether value }
}
Dann hast du Vertrag:
import "Converter.sol";
contract MainContract {
function getBalanceInEth() returns (uint256) {
return Converter.weiToEther(this.balance);
}
}
Damit das MainContract
funktioniert, benötigen Sie also zunächst eine Bibliothek, die in der Kette bereitgestellt wird, und MainContract
müssen auch die Adresse dieser Bibliothek kennen. Um dies explizit zu tun, verwenden Sie:
module.exports = function(deployer) {
deployer.deploy(Converter);
deployer.link(Converter, MainContract);
deployer.deploy(MainContract);
};
oder Sie können verwenden:
module.exports = function(deployer) {
deployer.deploy(Converter);
deployer.autolink();
deployer.deploy(MainContract);
};
Viele nützliche Informationen finden Sie auch in diesem Video
Diese Funktion fügt die angegebene Bibliothek zur links
Eigenschaft des Zielvertrags hinzu. Dadurch wird sichergestellt, dass der Speicherort der bereitgestellten Bibliothek gefunden werden kann, wenn der Bytecode des Vertrags generiert wird.
Außerdem werden alle Ereignisse der Bibliothek mit dem Zielvertrag zusammengeführt.
API-Dokumentation hier: https://github.com/trufflesuite/truffle-contract#mycontractlinkinstance
Siehe Quelle hier: https://github.com/trufflesuite/truffle-contract/blob/develop/contract.js#L539
Wie oben von @feihcsim erwähnt, muss dies jetzt manuell erfolgen: https://github.com/trufflesuite/truffle-deployer/commit/52e63189453e078f64b84aa3a50a2c7991b022b4
Aus Dokumentation :
Verknüpfen Sie eine bereits bereitgestellte Bibliothek mit einem Vertrag oder mehreren Verträgen. Ziele können ein einzelner Vertrag oder ein Array aus mehreren Verträgen sein. Wenn ein Vertrag innerhalb des Ziels nicht darauf angewiesen ist, dass die Bibliothek verknüpft ist, ignoriert der Deployer diesen Vertrag.
Beispiel:
// Deploy library LibA, then link LibA to contract B, then deploy B.
deployer.deploy(LibA);
deployer.link(LibA, B);
deployer.deploy(B);
// Link LibA to many contracts
deployer.link(LibA, [B, C, D]);
Nehmen Sie zum Beispiel das Standard-Metacoin-Projekt, das mit Trüffel geliefert wird
// deploy ConvertLib into the network
deployer.deploy(ConvertLib);
// Take the deployed ConvertLib address and link it to MetaCoin contract in bytecode
deployer.link(ConvertLib, MetaCoin);
// Now deploy the linked metacoin contract to the network
deployer.deploy(MetaCoin);
feihcsim
autolink
ist veraltetPaul Razvan Berg
KwahuNashoba