Oddbean new post about | logout
 Run this script 🤙🏾

https://zap.army/ 
 The easiest to remember website for Damus users to enable Zaps inside their app. 
nostr:nevent1qqsft76ah22mdwzmw67nlv2xjavrvqu23f5katrjpjqu5un9tnj47fspzemhxue69uhhqatjwpkx2un9d3shjtnrdakj7q3qrzg96zjavgatsx5ch2vvtq4atatly5rvdwqgjp0utxw45zeznvyqxpqqqqqqz2rzkkr 
 OMG, this is like running booze across the border during Prohibition! 
 🤣🤣🤣 Freedom fighters  
 😂😂😂 
 I’ll settle for the lesser ideal - cheaper booze. Still adjusting to the land of high-priced monopoly wine, after returning from Madeira. 
 That Madeira wine is good...and strong. It did me in a few times. 
 Well fuck me……it works. thank you sir 
 Absolutely. You're welcome.

This was one of my take aways from Prague. Maybe people aren't aware of this little workaround. 
 Thanks it works for me 
 How often do I need to run this script? 
 Only once. Except if you fully delete the app. Then you’ll have to run it again 
 Sweet! 
 I don't have an iPhone or Damus, but how does this work actually? 
 It enables the zap button on notes. It’s disabled by default. @jb55 would be able to explain it better though 
 Black magic fuckery 
 😂 
 How come can't link Mutiny wallet? I know it's not your problem 
 You can link it in the wallet section, in settings. Via NWC 
 It looks very fishy.
The link that thr On button opens begins with “damus:nostr:nscript1…” and then a bech32 blob that after decoding contains “asm”, “nostr_set_bool”, “memory” and some long binary stuff in between.
Why would you need such a long script to override a single boolean?
@damus is this legit? 
 Don’t trust, verify 
 @jb55 Is this a legit script? How can I parse it? 
 echo nscript… | bech32 -d > zap.wasm && wasm-objdump -x zap.wasm

nostrscripts are sandboxed. They can’t do anything other than set boolean flags in your settings atm 
 Can it send an http request with my nsec to a third party?

Anyways, here is the script. I don’t know much about WebAssembly, what does the last “data” operations do?

(module
  (type $t0 (func (param i32 i32 i32) (result i32)))
  (type $t1 (func))
  (import "nostr" "nostr_set_bool" (func $nostr.nostr_set_bool (type $t0)))
  (func $f1 (type $t1)
    (drop
      (call $nostr.nostr_set_bool
        (i32.const 1056)
        (i32.shr_u
          (i32.load
            (i32.const 1052))
          (i32.const 1))
        (i32.const 0))))
  (memory $memory (export "memory") 1)
  (start $f1)
  (data $d0 (i32.const 1036) "\1c")
  (data $d1 (i32.const 1048) "\02\00\00\00\0c\00\00\00n\00o\00z\00a\00p\00s")) 
 data defines well…. data. In this case its a utf16 string called “nozaps” this is used as an argument to the nostr_set_bool function call:

nostr_set_bool(“nozaps”, false)

This is the entire script 
 its not actually that long if you consider what it is. This is probably one of the smallest examples of a small, portable, sandboxed binary executable.

These will be used for executing turing complete algos, so I needed the flexibility of a portable executable. 
 @ZapOnBehalf 1000 Seems to work and makes ZapOnBehalf bot useless… 
 @ZapOnBehalf 1000 Seems to work and makes ZapOnBehalf bot useless… 
 Thank you Oren!