working out marketplace details
This commit is contained in:
parent
825200b386
commit
a20fc6864b
|
@ -0,0 +1,21 @@
|
|||
namespace CodexContractsPlugin
|
||||
{
|
||||
public interface ICodexContracts
|
||||
{
|
||||
string MarketplaceAddress { get; }
|
||||
}
|
||||
|
||||
public class CodexContractsAccess : ICodexContracts
|
||||
{
|
||||
public CodexContractsAccess(string marketplaceAddress, string abi, string tokenAddress)
|
||||
{
|
||||
MarketplaceAddress = marketplaceAddress;
|
||||
Abi = abi;
|
||||
TokenAddress = tokenAddress;
|
||||
}
|
||||
|
||||
public string MarketplaceAddress { get; }
|
||||
public string Abi { get; }
|
||||
public string TokenAddress { get; }
|
||||
}
|
||||
}
|
|
@ -5,11 +5,11 @@ namespace CodexContractsPlugin
|
|||
{
|
||||
public class CodexContractsContainerConfig
|
||||
{
|
||||
public CodexContractsContainerConfig(IGethNodeInfo gethNode)
|
||||
public CodexContractsContainerConfig(IGethNode gethNode)
|
||||
{
|
||||
GethNode = gethNode;
|
||||
}
|
||||
|
||||
public IGethNodeInfo GethNode { get; }
|
||||
public IGethNode GethNode { get; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ namespace CodexContractsPlugin
|
|||
{
|
||||
}
|
||||
|
||||
public IMarketplaceInfo DeployContracts(IGethNodeInfo gethNode)
|
||||
public ICodexContracts DeployContracts(IGethNode gethNode)
|
||||
{
|
||||
return starter.Start(gethNode);
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ namespace CodexContractsPlugin
|
|||
this.tools = tools;
|
||||
}
|
||||
|
||||
public IMarketplaceInfo Start(IGethNodeInfo gethNode)
|
||||
public ICodexContracts Start(IGethNode gethNode)
|
||||
{
|
||||
Log("Deploying Codex Marketplace...");
|
||||
|
||||
|
@ -43,7 +43,7 @@ namespace CodexContractsPlugin
|
|||
|
||||
Log("Extract completed. Marketplace deployed.");
|
||||
|
||||
return new MarketplaceInfo(marketplaceAddress, abi, tokenAddress);
|
||||
return new CodexContractsAccess(marketplaceAddress, abi, tokenAddress);
|
||||
}
|
||||
|
||||
private void Log(string msg)
|
||||
|
@ -56,7 +56,7 @@ namespace CodexContractsPlugin
|
|||
Time.WaitUntil(predicate, TimeSpan.FromMinutes(3), TimeSpan.FromSeconds(2));
|
||||
}
|
||||
|
||||
private StartupConfig CreateStartupConfig(IGethNodeInfo gethNode)
|
||||
private StartupConfig CreateStartupConfig(IGethNode gethNode)
|
||||
{
|
||||
var startupConfig = new StartupConfig();
|
||||
var contractsConfig = new CodexContractsContainerConfig(gethNode);
|
||||
|
|
|
@ -5,7 +5,7 @@ namespace CodexContractsPlugin
|
|||
{
|
||||
public static class CoreInterfaceExtensions
|
||||
{
|
||||
public static IMarketplaceInfo DeployCodexContracts(this CoreInterface ci, IGethNodeInfo gethNode)
|
||||
public static ICodexContracts DeployCodexContracts(this CoreInterface ci, IGethNode gethNode)
|
||||
{
|
||||
return Plugin(ci).DeployContracts(gethNode);
|
||||
}
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
namespace CodexContractsPlugin
|
||||
{
|
||||
public interface IMarketplaceInfo
|
||||
{
|
||||
}
|
||||
|
||||
public class MarketplaceInfo : IMarketplaceInfo
|
||||
{
|
||||
public MarketplaceInfo(string address, string abi, string tokenAddress)
|
||||
{
|
||||
Address = address;
|
||||
Abi = abi;
|
||||
TokenAddress = tokenAddress;
|
||||
}
|
||||
|
||||
public string Address { get; }
|
||||
public string Abi { get; }
|
||||
public string TokenAddress { get; }
|
||||
}
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
//namespace DistTestCore.Marketplace
|
||||
//{
|
||||
// public class MarketplaceInitialConfig
|
||||
// {
|
||||
// public MarketplaceInitialConfig(Ether initialEth, TestToken initialTestTokens, bool isValidator)
|
||||
// {
|
||||
// InitialEth = initialEth;
|
||||
// InitialTestTokens = initialTestTokens;
|
||||
// IsValidator = isValidator;
|
||||
// }
|
||||
|
||||
// public Ether InitialEth { get; }
|
||||
// public TestToken InitialTestTokens { get; }
|
||||
// public bool IsValidator { get; }
|
||||
// public int? AccountIndexOverride { get; set; }
|
||||
// }
|
||||
//}
|
|
@ -5,6 +5,8 @@ namespace CodexPlugin
|
|||
{
|
||||
public class CodexContainerRecipe : ContainerRecipeFactory
|
||||
{
|
||||
private readonly MarketplaceStarter marketplaceStarter = new MarketplaceStarter();
|
||||
|
||||
private const string DefaultDockerImage = "codexstorage/nim-codex:latest-dist-tests";
|
||||
|
||||
public const string MetricsPortTag = "metrics_port";
|
||||
|
@ -75,26 +77,28 @@ namespace CodexPlugin
|
|||
AddPodAnnotation("prometheus.io/port", metricsPort.Number.ToString());
|
||||
}
|
||||
|
||||
//if (config.MarketplaceConfig != null)
|
||||
//{
|
||||
// var gethConfig = startupConfig.Get<GethStartResult>();
|
||||
// var companionNode = gethConfig.CompanionNode;
|
||||
// var companionNodeAccount = companionNode.Accounts[GetAccountIndex(config.MarketplaceConfig)];
|
||||
// Additional(companionNodeAccount);
|
||||
if (config.MarketplaceConfig != null)
|
||||
{
|
||||
var mconfig = config.MarketplaceConfig;
|
||||
var ip = mconfig.GethNode.RunningContainer.Pod.PodInfo.Ip;
|
||||
var port = mconfig.GethNode.WsPort.Number;
|
||||
var marketplaceAddress = mconfig.CodexContracts.MarketplaceAddress;
|
||||
|
||||
// var ip = companionNode.RunningContainer.Pod.PodInfo.Ip;
|
||||
// var port = companionNode.RunningContainer.Recipe.GetPortByTag(GethContainerRecipe.HttpPortTag).Number;
|
||||
AddEnvVar("CODEX_ETH_PROVIDER", $"ws://{ip}:{port}");
|
||||
AddEnvVar("CODEX_MARKETPLACE_ADDRESS", marketplaceAddress);
|
||||
AddEnvVar("CODEX_PERSISTENCE", "true");
|
||||
|
||||
// AddEnvVar("CODEX_ETH_PROVIDER", $"ws://{ip}:{port}");
|
||||
// AddEnvVar("CODEX_ETH_ACCOUNT", companionNodeAccount.Account);
|
||||
// AddEnvVar("CODEX_MARKETPLACE_ADDRESS", gethConfig.MarketplaceNetwork.Marketplace.Address);
|
||||
// AddEnvVar("CODEX_PERSISTENCE", "true");
|
||||
// Custom scripting in the Codex test image will write this variable to a private-key file,
|
||||
// and pass the correct filename to Codex.
|
||||
var mStart = marketplaceStarter.Start();
|
||||
AddEnvVar("PRIV_KEY", mStart.PrivateKey);
|
||||
Additional(mStart);
|
||||
|
||||
// if (config.MarketplaceConfig.IsValidator)
|
||||
// {
|
||||
// AddEnvVar("CODEX_VALIDATOR", "true");
|
||||
// }
|
||||
//}
|
||||
if (config.MarketplaceConfig.IsValidator)
|
||||
{
|
||||
AddEnvVar("CODEX_VALIDATOR", "true");
|
||||
}
|
||||
}
|
||||
|
||||
AddPodLabel("codexid", Image);
|
||||
}
|
||||
|
|
|
@ -11,7 +11,9 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\CodexContractsPlugin\CodexContractsPlugin.csproj" />
|
||||
<ProjectReference Include="..\Core\Core.csproj" />
|
||||
<ProjectReference Include="..\GethPlugin\GethPlugin.csproj" />
|
||||
<ProjectReference Include="..\KubernetesWorkflow\KubernetesWorkflow.csproj" />
|
||||
<ProjectReference Include="..\MetricsPlugin\MetricsPlugin.csproj" />
|
||||
<ProjectReference Include="..\Nethereum\NethereumWorkflow.csproj" />
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
using KubernetesWorkflow;
|
||||
using CodexContractsPlugin;
|
||||
using GethPlugin;
|
||||
using KubernetesWorkflow;
|
||||
using Utils;
|
||||
|
||||
namespace CodexPlugin
|
||||
|
@ -14,6 +16,8 @@ namespace CodexPlugin
|
|||
ICodexSetup WithBlockMaintenanceInterval(TimeSpan duration);
|
||||
ICodexSetup WithBlockMaintenanceNumber(int numberOfBlocks);
|
||||
ICodexSetup EnableMetrics();
|
||||
ICodexSetup EnableMarketplace(IGethNode gethNode, ICodexContracts codexContracts, bool isValidator = false);
|
||||
|
||||
//ICodexSetup EnableMarketplace(TestToken initialBalance);
|
||||
//ICodexSetup EnableMarketplace(TestToken initialBalance, Ether initialEther);
|
||||
//ICodexSetup EnableMarketplace(TestToken initialBalance, Ether initialEther, bool isValidator);
|
||||
|
@ -82,6 +86,12 @@ namespace CodexPlugin
|
|||
return this;
|
||||
}
|
||||
|
||||
public ICodexSetup EnableMarketplace(IGethNode gethNode, ICodexContracts codexContracts, bool isValidator = false)
|
||||
{
|
||||
MarketplaceConfig = new MarketplaceInitialConfig(gethNode, codexContracts, isValidator);
|
||||
return this;
|
||||
}
|
||||
|
||||
//public ICodexSetup EnableMarketplace(TestToken initialBalance)
|
||||
//{
|
||||
// return EnableMarketplace(initialBalance, 1000.Eth());
|
||||
|
|
|
@ -10,7 +10,7 @@ namespace CodexPlugin
|
|||
public CodexLogLevel LogLevel { get; set; }
|
||||
public ByteSize? StorageQuota { get; set; }
|
||||
public bool MetricsEnabled { get; set; }
|
||||
//public MarketplaceInitialConfig? MarketplaceConfig { get; set; }
|
||||
public MarketplaceInitialConfig? MarketplaceConfig { get; set; }
|
||||
public string? BootstrapSpr { get; set; }
|
||||
public int? BlockTTL { get; set; }
|
||||
public TimeSpan? BlockMaintenanceInterval { get; set; }
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
using CodexContractsPlugin;
|
||||
using GethPlugin;
|
||||
|
||||
namespace CodexPlugin
|
||||
{
|
||||
public class MarketplaceInitialConfig
|
||||
{
|
||||
public MarketplaceInitialConfig(IGethNode gethNode, ICodexContracts codexContracts, bool isValidator)
|
||||
{
|
||||
GethNode = gethNode;
|
||||
CodexContracts = codexContracts;
|
||||
IsValidator = isValidator;
|
||||
}
|
||||
|
||||
public IGethNode GethNode { get; }
|
||||
public ICodexContracts CodexContracts { get; }
|
||||
public bool IsValidator { get; }
|
||||
|
||||
//public MarketplaceInitialConfig(Ether initialEth, TestToken initialTestTokens, bool isValidator)
|
||||
//{
|
||||
// InitialEth = initialEth;
|
||||
// InitialTestTokens = initialTestTokens;
|
||||
// IsValidator = isValidator;
|
||||
//}
|
||||
|
||||
//public Ether InitialEth { get; }
|
||||
//public TestToken InitialTestTokens { get; }
|
||||
//public bool IsValidator { get; }
|
||||
//public int? AccountIndexOverride { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
namespace CodexPlugin
|
||||
{
|
||||
[Serializable]
|
||||
public class MarketplaceStartResults
|
||||
{
|
||||
public MarketplaceStartResults(string ethAddress, string privateKey)
|
||||
{
|
||||
EthAddress = ethAddress;
|
||||
PrivateKey = privateKey;
|
||||
}
|
||||
|
||||
public string EthAddress { get; }
|
||||
public string PrivateKey { get; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
using Nethereum.Hex.HexConvertors.Extensions;
|
||||
using Nethereum.Web3.Accounts;
|
||||
|
||||
namespace CodexPlugin
|
||||
{
|
||||
public class MarketplaceStarter
|
||||
{
|
||||
public MarketplaceStartResults Start()
|
||||
{
|
||||
var ecKey = Nethereum.Signer.EthECKey.GenerateKey();
|
||||
var privateKey = ecKey.GetPrivateKeyAsBytes().ToHex();
|
||||
var account = new Account(privateKey);
|
||||
|
||||
return new MarketplaceStartResults(account.Address, account.PrivateKey);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -4,7 +4,7 @@ namespace GethPlugin
|
|||
{
|
||||
public static class CoreInterfaceExtensions
|
||||
{
|
||||
public static IGethNodeInfo StartGethNode(this CoreInterface ci, Action<IGethSetup> setup)
|
||||
public static IGethNode StartGethNode(this CoreInterface ci, Action<IGethSetup> setup)
|
||||
{
|
||||
return Plugin(ci).StartGeth(setup);
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ using NethereumWorkflow;
|
|||
|
||||
namespace GethPlugin
|
||||
{
|
||||
public interface IGethNodeInfo
|
||||
public interface IGethNode
|
||||
{
|
||||
RunningContainer RunningContainer { get; }
|
||||
Port DiscoveryPort { get; }
|
||||
|
@ -14,9 +14,9 @@ namespace GethPlugin
|
|||
NethereumInteraction StartInteraction(ILog log);
|
||||
}
|
||||
|
||||
public class GethNodeInfo : IGethNodeInfo
|
||||
public class GethNode : IGethNode
|
||||
{
|
||||
public GethNodeInfo(RunningContainer runningContainer, AllGethAccounts allAccounts, string pubKey, Port discoveryPort, Port httpPort, Port wsPort)
|
||||
public GethNode(RunningContainer runningContainer, AllGethAccounts allAccounts, string pubKey, Port discoveryPort, Port httpPort, Port wsPort)
|
||||
{
|
||||
RunningContainer = runningContainer;
|
||||
AllAccounts = allAccounts;
|
|
@ -30,7 +30,7 @@ namespace GethPlugin
|
|||
{
|
||||
}
|
||||
|
||||
public IGethNodeInfo StartGeth(Action<IGethSetup> setup)
|
||||
public IGethNode StartGeth(Action<IGethSetup> setup)
|
||||
{
|
||||
var startupConfig = new GethStartupConfig();
|
||||
setup(startupConfig);
|
||||
|
|
|
@ -12,7 +12,7 @@ namespace GethPlugin
|
|||
this.tools = tools;
|
||||
}
|
||||
|
||||
public IGethNodeInfo StartGeth(GethStartupConfig gethStartupConfig)
|
||||
public IGethNode StartGeth(GethStartupConfig gethStartupConfig)
|
||||
{
|
||||
Log("Starting Geth bootstrap node...");
|
||||
|
||||
|
@ -36,7 +36,7 @@ namespace GethPlugin
|
|||
var wsPort = container.Recipe.GetPortByTag(GethContainerRecipe.wsPortTag);
|
||||
if (wsPort == null) throw new Exception("Expected ws port to be created.");
|
||||
|
||||
var result = new GethNodeInfo(container, accounts, pubKey, discoveryPort, httpPort, wsPort);
|
||||
var result = new GethNode(container, accounts, pubKey, discoveryPort, httpPort, wsPort);
|
||||
|
||||
Log($"Geth bootstrap node started with account '{result.Account.Account}'");
|
||||
|
||||
|
|
|
@ -52,6 +52,21 @@ namespace Tests.BasicTests
|
|||
|
||||
var contracts = Ci.DeployCodexContracts(geth);
|
||||
|
||||
var node = Ci.SetupCodexNode(s => s.EnableMarketplace(geth, contracts));
|
||||
|
||||
var i = 0;
|
||||
|
||||
//geth.SendEth(node.EthAddress, 10.Eth());
|
||||
|
||||
//contracts.MintTestTokens(geth, node.EthAddress, 100.TestTokens());
|
||||
|
||||
//geth.GetEthBalance(node.EthAddress);
|
||||
|
||||
//contracts.GetTestTokenBalance(geth, node.EthAddress);
|
||||
|
||||
|
||||
|
||||
|
||||
//var sellerInitialBalance = 234.TestTokens();
|
||||
//var buyerInitialBalance = 1000.TestTokens();
|
||||
//var fileSize = 10.MB();
|
||||
|
|
Loading…
Reference in New Issue