varint::encode_to_vec(symbol.into(), &mut payload);
      }

      if let Some(limit) = etching.limit {
        varint::encode_to_vec(TAG_LIMIT, &mut payload);
        varint::encode_to_vec(limit, &mut payload);
      }

      if let Some(term) = etching.term {
        varint::encode_to_vec(TAG_TERM, &mut payload);
        varint::encode_to_vec(term.into(), &mut payload);
      }
    }

    if self.burn {
      varint::encode_to_vec(TAG_BURN, &mut payload);
      varint::encode_to_vec(0, &mut payload);
    }

    if !self.edicts.is_empty() {
      varint::encode_to_vec(TAG_BODY, &mut payload);

      let mut edicts = self.edicts.clone();
      edicts.sort_by_key(|edict| edict.id);

      let mut id = 0;
      for edict in edicts {
        varint::encode_to_vec(edict.id - id, &mut payload);
        varint::encode_to_vec(edict.amount, &mut payload);
        varint::encode_to_vec(edict.output, &mut payload);
        id = edict.id;
      }
    }

    let mut builder = script::Builder::new()
      .push_opcode(opcodes::all::OP_RETURN)