Skip to content
This repository has been archived by the owner on Dec 7, 2023. It is now read-only.

Commit

Permalink
upgrade to 2.1.0
Browse files Browse the repository at this point in the history
1. Add "sendmany" rpc api
2. Add "show utxo" command
3. Save peers state to file
4. Improve the help message
  • Loading branch information
Erik Zhang committed Aug 15, 2017
1 parent 8d71161 commit a63d826
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 5 deletions.
50 changes: 48 additions & 2 deletions neo-cli/Network/RPC/RpcServerWithWallet.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,12 @@ protected override JObject Process(string method, JArray _params)
UInt256 assetId = UInt256.Parse(_params[0].AsString());
UInt160 scriptHash = Wallet.ToScriptHash(_params[1].AsString());
Fixed8 value = Fixed8.Parse(_params[2].AsString());
Fixed8 fee = _params.Count >= 4 ? Fixed8.Parse(_params[3].AsString()) : Fixed8.Zero;
UInt160 change_address = _params.Count >= 5 ? Wallet.ToScriptHash(_params[4].AsString()) : null;
if (value <= Fixed8.Zero)
throw new RpcException(-32602, "Invalid params");
Fixed8 fee = _params.Count >= 4 ? Fixed8.Parse(_params[3].AsString()) : Fixed8.Zero;
if (value < Fixed8.Zero)
throw new RpcException(-32602, "Invalid params");
UInt160 change_address = _params.Count >= 5 ? Wallet.ToScriptHash(_params[4].AsString()) : null;
ContractTransaction tx = Program.Wallet.MakeTransaction(new ContractTransaction
{
Outputs = new[]
Expand Down Expand Up @@ -69,6 +71,50 @@ protected override JObject Process(string method, JArray _params)
return context.ToJson();
}
}
case "sendmany":
if (Program.Wallet == null)
throw new RpcException(-400, "Access denied");
else
{
JArray to = (JArray)_params[0];
if (to.Count == 0)
throw new RpcException(-32602, "Invalid params");
TransactionOutput[] outputs = new TransactionOutput[to.Count];
for (int i = 0; i < to.Count; i++)
{
outputs[i] = new TransactionOutput
{
AssetId = UInt256.Parse(to[i]["asset"].AsString()),
Value = Fixed8.Parse(to[i]["value"].AsString()),
ScriptHash = Wallet.ToScriptHash(to[i]["address"].AsString())
};
if (outputs[i].Value <= Fixed8.Zero)
throw new RpcException(-32602, "Invalid params");
}
Fixed8 fee = _params.Count >= 2 ? Fixed8.Parse(_params[1].AsString()) : Fixed8.Zero;
if (fee < Fixed8.Zero)
throw new RpcException(-32602, "Invalid params");
UInt160 change_address = _params.Count >= 3 ? Wallet.ToScriptHash(_params[2].AsString()) : null;
ContractTransaction tx = Program.Wallet.MakeTransaction(new ContractTransaction
{
Outputs = outputs
}, change_address: change_address, fee: fee);
if (tx == null)
throw new RpcException(-300, "Insufficient funds");
SignatureContext context = new SignatureContext(tx);
Program.Wallet.Sign(context);
if (context.Completed)
{
tx.Scripts = context.GetScripts();
Program.Wallet.SaveTransaction(tx);
LocalNode.Relay(tx);
return tx.ToJson();
}
else
{
return context.ToJson();
}
}
case "getnewaddress":
if (Program.Wallet == null)
throw new RpcException(-400, "Access denied");
Expand Down
56 changes: 55 additions & 1 deletion neo-cli/Shell/MainService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ namespace Neo.Shell
{
internal class MainService : ConsoleServiceBase
{
private const string PeerStatePath = "peers.dat";

private RpcServerWithWallet rpc;
private ConsensusWithPolicy consensus;

Expand Down Expand Up @@ -265,10 +267,12 @@ private bool OnHelpCommand(string[] args)
"Wallet Commands:\n" +
"\tcreate wallet <path>\n" +
"\topen wallet <path>\n" +
"\tupgrade wallet <path>\n" +
"\trebuild index\n" +
"\tlist address\n" +
"\tlist asset\n" +
"\tlist key\n" +
"\tshow utxo [id|alias]\n" +
"\tshow gas\n" +
"\tclaim gas\n" +
"\tcreate address [n=1]\n" +
Expand All @@ -279,8 +283,10 @@ private bool OnHelpCommand(string[] args)
"\tshow state\n" +
"\tshow node\n" +
"\tshow pool\n" +
"\texport blocks [path=chain.acc]\n" +
"Advanced Commands:\n" +
"\tstart consensus\n");
"\tstart consensus\n" +
"\trefresh policy\n");
return true;
}

Expand Down Expand Up @@ -604,6 +610,8 @@ private bool OnShowCommand(string[] args)
return OnShowPoolCommand(args);
case "state":
return OnShowStateCommand(args);
case "utxo":
return OnShowUtxoCommand(args);
default:
return base.OnCommand(args);
}
Expand Down Expand Up @@ -634,9 +642,51 @@ private bool OnShowStateCommand(string[] args)
return true;
}

private bool OnShowUtxoCommand(string[] args)
{
if (Program.Wallet == null)
{
Console.WriteLine("You have to open the wallet first.");
return true;
}
IEnumerable<Coin> coins = Program.Wallet.FindUnspentCoins();
if (args.Length >= 3)
{
UInt256 assetId;
switch (args[2].ToLower())
{
case "neo":
case "ans":
assetId = Blockchain.SystemShare.Hash;
break;
case "gas":
case "anc":
assetId = Blockchain.SystemCoin.Hash;
break;
default:
assetId = UInt256.Parse(args[2]);
break;
}
coins = coins.Where(p => p.Output.AssetId.Equals(assetId));
}
Coin[] coins_array = coins.ToArray();
const int MAX_SHOW = 100;
for (int i = 0; i < coins_array.Length && i < MAX_SHOW; i++)
Console.WriteLine($"{coins_array[i].Reference.PrevHash}:{coins_array[i].Reference.PrevIndex}");
if (coins_array.Length > MAX_SHOW)
Console.WriteLine($"({coins_array.Length - MAX_SHOW} more)");
Console.WriteLine($"total: {coins_array.Length} UTXOs");
return true;
}

protected internal override void OnStart(string[] args)
{
Blockchain.RegisterBlockchain(new LevelDBBlockchain(Settings.Default.DataDirectoryPath));
if (File.Exists(PeerStatePath))
using (FileStream fs = new FileStream(PeerStatePath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
LocalNode.LoadState(fs);
}
LocalNode = new LocalNode();
Task.Run(() =>
{
Expand Down Expand Up @@ -700,6 +750,10 @@ protected internal override void OnStop()
if (consensus != null) consensus.Dispose();
if (rpc != null) rpc.Dispose();
LocalNode.Dispose();
using (FileStream fs = new FileStream(PeerStatePath, FileMode.Create, FileAccess.Write, FileShare.None))
{
LocalNode.SaveState(fs);
}
Blockchain.Default.Dispose();
}

Expand Down
4 changes: 2 additions & 2 deletions neo-cli/neo-cli.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<PropertyGroup>
<Copyright>2016-2017 The Neo Project</Copyright>
<AssemblyTitle>Neo.CLI</AssemblyTitle>
<Version>2.0.2</Version>
<Version>2.1.0</Version>
<Authors>The Neo Project</Authors>
<TargetFramework>netcoreapp1.0</TargetFramework>
<AssemblyName>neo-cli</AssemblyName>
Expand Down Expand Up @@ -31,7 +31,7 @@

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="1.0.2" />
<PackageReference Include="Neo" Version="2.0.2" />
<PackageReference Include="Neo" Version="2.1.0" />
</ItemGroup>

</Project>

0 comments on commit a63d826

Please sign in to comment.