From 8552867695bac9e9903109938a8a9205822f37c7 Mon Sep 17 00:00:00 2001
From: Thomas Kerin <me@thomaskerin.io>
Date: Thu, 15 Dec 2016 11:50:58 +0100
Subject: [PATCH] bscript.compie - minimal encoding of -1 stack element

---
 src/script.js             | 8 +++++++-
 test/fixtures/script.json | 7 +++++++
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/script.js b/src/script.js
index f849371..62c5d3a 100644
--- a/src/script.js
+++ b/src/script.js
@@ -39,7 +39,7 @@ function compile (chunks) {
     // data chunk
     if (Buffer.isBuffer(chunk)) {
       // adhere to BIP62.3, minimal push policy
-      if (chunk.length === 1 && chunk[0] >= 1 && chunk[0] <= 16) {
+      if (chunk.length === 1 && (chunk[0] === 0x81 || chunk[0] >= 1 && chunk[0] <= 16)) {
         return accum + 1
       }
 
@@ -64,6 +64,12 @@ function compile (chunks) {
         return
       }
 
+      if (chunk.length === 1 && chunk[0] === 0x81) {
+        buffer.writeUInt8(OPS.OP_1NEGATE, offset)
+        offset += 1
+        return
+      }
+
       offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
 
       chunk.copy(buffer, offset)
diff --git a/test/fixtures/script.json b/test/fixtures/script.json
index 89456c9..c6a0eea 100644
--- a/test/fixtures/script.json
+++ b/test/fixtures/script.json
@@ -1,5 +1,12 @@
 {
   "valid": [
+    {
+      "asm": "OP_1NEGATE",
+      "script": "4f",
+      "stack": [
+        "81"
+      ]
+    },
     {
       "asm": "304402207515cf147d201f411092e6be5a64a6006f9308fad7b2a8fdaab22cd86ce764c202200974b8aca7bf51dbf54150d3884e1ae04f675637b926ec33bf75939446f6ca2801",
       "script": "47304402207515cf147d201f411092e6be5a64a6006f9308fad7b2a8fdaab22cd86ce764c202200974b8aca7bf51dbf54150d3884e1ae04f675637b926ec33bf75939446f6ca2801",