[译]用java编写你自己的第一个区块链应用 Part 2

 

Creating Your First Blockchain with Java. Part 2.

本教程旨在帮助您了解如何进行区块链编程.你可以在这里查看part 1

在第二部分,我们会完成下面的目标:

  • 创建一个简单的钱包
  • 使用我们创建的区块链发送已签署的交易信息
  • 感觉更酷.

最终我们会自己生产出一种加密货币!

需要说明的是,这部分不会很枯燥,但是内容相比于第一部分是比较长的.

继续上一篇教程,我们做出了一个基本的可验证的区块链系统,但是目前我们的区块链只存储一些无用的信息(String 对象).今天,我们将要重构代码,使其存储真正的交易数据(而且每个块会存储多笔交易数据),且允许创造自己的一种加密货币.我将其称之为”NoobCoin”(直译:菜鸟币).

Preparing a Wallet

在加密货币中,资金的所有权作为交易在区块链上进行转移,每个参与者都有一个地址(此处为参与者的公钥)进行资金的支出和收入.在钱包最基本的功能中,只能进行参与者地址的存储.更多的,钱包应该还能重新发起一笔交易.

现在,让我们新建一个钱包 类 去持有 公钥和私钥

package noobchain;
import java.security.*;

public class Wallet {
	public PrivateKey privateKey;
	public PublicKey publicKey;
}

什么公钥和私钥?

在我们的’noobcoin’系统中, 公钥就是我们交易用的地址.我们告诉别人我们的公钥来进行交易的收付款.使用私钥进行交易的签名.这样除了我们自己以外, 没有人可以使用我们的’noobcoin’.谨记,我们不能将私钥告诉别人,同时,我们也需要将公钥和交易一起发送出去,以便让别人进行校验,证明交易数据没有被篡改.

首先,我们需要生成一对密钥.我们使用Elliptic-curve cryptography算法去生成它们.
让我们在Wallet 类中新增加一个generateKeyPair()方法,并在构造函数中调用它.

package noobchain;
import java.security.*;

public class Wallet {
	
	public PrivateKey privateKey;
	public PublicKey publicKey;
	
	public Wallet(){
		generateKeyPair();	
	}
		
	public void generateKeyPair() {
		try {
			KeyPairGenerator keyGen = KeyPairGenerator.getInstance("ECDSA","BC");
			SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
			ECGenParameterSpec ecSpec = new ECGenParameterSpec("prime192v1");
			// Initialize the key generator and generate a KeyPair
			keyGen.initialize(ecSpec, random);   //256 bytes provides an acceptable security level
	        	KeyPair keyPair = keyGen.generateKeyPair();
	        	// Set the public and private keys from the keyPair
	        	privateKey = keyPair.getPrivate();
	        	publicKey = keyPair.getPublic();
		}catch(Exception e) {
			throw new RuntimeException(e);
		}
	}
	
}

待续