@Override public void parse(NulsByteBuffer byteBuffer) throws NulsException { List<Script> scripts = new ArrayList<>(); while (!byteBuffer.isFinished()) { scripts.add(new Script(byteBuffer.readByLengthByte())); } this.scripts = scripts; }
@Override public void parse(NulsByteBuffer byteBuffer) throws NulsException { // 从流中读取签名,兼容新老版本 int course = 0; boolean isScript = false; List<P2PHKSignature> p2PHKSignatures = new ArrayList<>(); List<Script> scripts = new ArrayList<>(); while (!byteBuffer.isFinished()) { course = byteBuffer.getCursor(); //读取两个字节(脚本标识位),如果两个字节都为0x00则表示后面的数据流为脚本数据 if (!isScript && byteBuffer.getPayload().length < 2) { break; } if (isScript || Arrays.equals(NulsConstant.SIGN_HOLDER, byteBuffer.readBytes(2))) { isScript = true; if (!byteBuffer.isFinished()) { scripts.add(new Script(byteBuffer.readByLengthByte())); } } else { byteBuffer.setCursor(course); p2PHKSignatures.add(byteBuffer.readNulsData(new P2PHKSignature())); } } this.p2PHKSignatures = p2PHKSignatures; this.scripts = scripts; }
@Override public void parse(NulsByteBuffer byteBuffer) throws NulsException { this.preHash = byteBuffer.readHash(); this.merkleHash = byteBuffer.readHash(); this.time = byteBuffer.readVarInt(); this.height = byteBuffer.readVarInt(); this.txCount = byteBuffer.readVarInt(); this.extend = byteBuffer.readByLengthByte(); this.scriptSign = byteBuffer.readNulsData(new BlockSignature()); this.txHashList = new ArrayList<>(); for (int i = 0; i < txCount; i++) { this.txHashList.add(byteBuffer.readHash()); } if (!byteBuffer.isFinished()) { this.stateRoot = byteBuffer.readByLengthByte(); } }
private List<BaseMessage> analysisMessage(ByteBuf buffer) throws NulsException { List<BaseMessage> messageList; try { messageList = new ArrayList<>(); byte[] bytes = new byte[buffer.readableBytes()]; buffer.readBytes(bytes); NulsByteBuffer byteBuffer = new NulsByteBuffer(bytes); while (!byteBuffer.isFinished()) { MessageHeader header = byteBuffer.readNulsData(new MessageHeader()); byteBuffer.setCursor(byteBuffer.getCursor() - header.size()); BaseMessage message = getMessageBusService().getMessageInstance(header.getModuleId(), header.getMsgType()).getData(); message = byteBuffer.readNulsData(message); messageList.add(message); } } catch (Exception e) { throw new NulsException(KernelErrorCode.DATA_ERROR, e); } finally { buffer.clear(); } return messageList; }
@Override public void parse(NulsByteBuffer byteBuffer) throws NulsException { this.roundIndex = byteBuffer.readUint32(); this.consensusMemberCount = byteBuffer.readUint16(); this.roundStartTime = byteBuffer.readUint48(); this.packingIndexOfRound = byteBuffer.readUint16(); if (!byteBuffer.isFinished()) { this.mainVersion = byteBuffer.readInt32(); this.currentVersion = byteBuffer.readInt32(); this.percent = byteBuffer.readUint16(); this.delay = byteBuffer.readUint32(); this.stateRoot = byteBuffer.readByLengthByte(); } }
for (int i = 0; i < NulsContext.REDPUNISH_BIFURCATION && !byteBuffer.isFinished(); i++) { BlockHeader header1 = null; BlockHeader header2 = null;