Пример #1
0
 private async Task ShowInformationAsync(SignatureContext context)
 {
     if (context.Completed)
     {
         context.Signable.Scripts = context.GetScripts();
         Transaction tx = (Transaction)context.Signable;
         await Program.LocalNode.RelayAsync(tx);
         InformationBox.Show(tx.Hash.ToString(), "交易已发送,这是交易编号(TXID):", "交易成功");
     }
     else
     {
         InformationBox.Show(context.ToString(), "交易构造完成,但没有足够的签名:", "签名不完整");
     }
 }
Пример #2
0
 public void Sign(Block block, ECPoint[] miners)
 {
     SignatureContext context = new SignatureContext(block);
     Contract contract = MultiSigContract.Create(null, miners.Length / 2 + 1, miners);
     foreach (ECPoint pubKey in miners)
     {
         UInt160 publicKeyHash = pubKey.EncodePoint(true).ToScriptHash();
         Account account = GetAccount(publicKeyHash);
         if (account == null) continue;
         byte[] signature = block.Sign(account);
         context.Add(contract, account.PublicKey, signature);
     }
     block.Script = context.GetScripts()[0];
 }
Пример #3
0
 private void 资产分发IToolStripMenuItem_Click(object sender, EventArgs e)
 {
     using (IssueDialog dialog = new IssueDialog())
     {
         if (dialog.ShowDialog() != DialogResult.OK) return;
         IssueTransaction tx = dialog.GetTransaction();
         if (tx == null) return;
         //TODO: 检查是否符合规则,如是否超过总量、分发方式是否符合约定等;
         SignatureContext context = new SignatureContext(tx);
         Program.CurrentWallet.Sign(context);
         if (context.Completed)
         {
             context.Signable.Scripts = context.GetScripts();
             InformationBox.Show(context.Signable.ToArray().ToHexString(), "分发交易构造完成,并已完整签名,可以广播。");
         }
         else
         {
             InformationBox.Show(context.ToString(), "分发交易构造完成,但签名信息还不完整。");
         }
     }
 }