正如用块菌文档编写的那样:
迁移是Javascript文件,它帮助您将契约部署到Ethereum网络。这些文件负责分阶段执行部署任务,它们是在假设您的部署需求会随时间变化的前提下编写的。随着项目的发展,您将创建新的迁移脚本,以推进区块链上的这种发展。以前运行的迁移历史记录在链上通过一个特殊的迁移合同,详见下文。
但这到底意味着什么呢?迁移的用例是什么?
我还试图理解Migrations.sol文件,这是在Truffy教程中提供的:
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);
}
}发布于 2016-08-25 11:17:13
Migrations契约存储(在last_completed_migration中)一个与上一次应用的“迁移”脚本相对应的数字,该脚本位于migrations文件夹中。无论如何,部署这个Migrations契约始终是第一个这样的步骤。编号惯例是x_script_name.js,x从1开始。从2_...开始,你的真正的合同通常会以脚本的形式出现。
因此,由于此Migrations契约存储了应用的最后一个部署脚本的数量,Truffle将不再运行这些脚本。另一方面,在未来,您的应用程序可能需要一个修改,或新的合同部署。要做到这一点,您需要创建一个新脚本,其数量将增加,该脚本将描述需要执行的步骤。然后,再一次,他们跑了一次,他们就不会再跑了。
是的,最后两行是真正的坚固。看看http://solidity.readthedocs.io/en/latest/contracts.html#creating-contracts在contract OwnedToken {里面。
发布于 2018-04-02 07:11:16
这里是一个示例,一个真正的用例的信托迁移。
我有一个存储合同和一个接口合同。接口需要知道存储的位置,存储需要向接口授予权限。
因此,在第二次迁移中(第一次迁移是专门用于经营信托基金的),我正在部署存储:
var MEStorage = artifacts.require("./MEStorage.sol");
module.exports = function(deployer) {
deployer.deploy(MEStorage);
};在第三节中,我获得了存储地址,并部署了这个地址作为参数的接口。在我有了接口地址之后,我在存储中向它授予权限:
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
});
});
};发布于 2018-10-26 01:12:45
迁移是一堆样板,这是松露需要的,你会复制粘贴,然后忘记你曾经做过。
https://ethereum.stackexchange.com/questions/8299
复制相似问题