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(), "交易构造完成,但没有足够的签名:", "签名不完整"); } }
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]; }
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(), "分发交易构造完成,但签名信息还不完整。"); } } }