[HELP] Link error

I'm trying to build a simple "Hello World!" app using GTK. I've followed the instructions in the gtk-rs readme to install the MSVC toolchain.  The program compiles fine but I get a link error:
Compiling my-gtk-app v0.1.0 (C:\Users\nicho\Desktop\Rust\my-gtk-app)
error: linking with `link.exe` failed: exit code: 1181
  |
  = note: "C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\VC\\Tools\\MSVC\\14.33.31629\\bin\\HostX64\\x64\\link.exe" "/NOLOGO" "C:\\Users\\nicho\\AppData\\Local\\Temp\\rustcuH2JYV\\symbols.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.147r7lb34qhprh4p.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.14cv1xd4nvwvw5ma.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.18sqbz4xxkyl8qoe.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.19ogtpnhzbd79y4u.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.1b26z52b4k2q9by9.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.1f41kvo8g1i26vti.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.1ghiohjc4n093crv.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.1j6njc7x002odz4q.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.1uap6m5ngb0ha1xt.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.24hoasjjjvjlxtr9.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.26443z9h78a5wpyz.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.2eo89z6d1fgn2mzm.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.2ez0gjnw9z8qqrax.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.2gvei9o80ymu8ib9.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.2ihcarxw6cp3js9l.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.2nagidu7botk85ko.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.2pa27allyq3gfl5u.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.2pvnxo8yw4umj20d.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.30poo08ibadjwupw.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.36lawhddgs8vrt1e.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.3eip5wx9cpp1nrik.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.3r9buvcd3vsq07s6.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.44jgbakte1t6zsll.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.4azez3szj3qk2mmg.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.4flb81wwz2e4rx86.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.4gzs7cyvh2f5m31h.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.4oqbieaiv1t901uc.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.4u1gj3t7mk7esr5m.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.4vl1xhr4kzlxdunl.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.4xd34lrlyv6pt7o4.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.542849rl07sb8vhb.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.5676c57pxlr6xx72.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.8g1k5h43obhmini.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.ba511lf0pyf6fto.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.d6dhjlgnqlcuwh8.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.ew28fqjm20fakgu.rcgu.o" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.1d9rfcs34jblq6sp.rcgu.o" "/LIBPATH:C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:gtk-buildgtkx64release/lib" "/LIBPATH:C:\\Users\\nicho\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libgtk4-dee5550f9ff52d46.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libgsk4-37c2e7a3780a3467.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libgraphene-5a4271b9425b8599.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libgdk4-332be872b807ed17.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libpango-a827812573c6c334.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libgdk_pixbuf-3697ff4470a82599.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libgio-1122475ff8f68c29.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libfutures_io-57fde6c678723bd3.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libcairo-8fd4fff351233555.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libglib-b88198821064bb6e.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libfutures_executor-bb371e0f7072dd5e.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libfutures_util-0729c6fa1e8fd512.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libslab-4012137df51d774c.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libpin_project_lite-809f9e414478ccf5.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libpin_utils-420d583087251d8e.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libsmallvec-ce0b5094f41ce722.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libthiserror-c37489e722b5fa78.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libfutures_channel-e5399f2ddfa83411.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libfutures_task-c15d028497f41376.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libfutures_core-605cb073da8174df.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libonce_cell-7ab27a35b4c65f12.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libbitflags-5ebaaf871524aa91.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libgtk4_sys-f80e423a9682f384.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libgsk4_sys-ccc5ae602cde07c3.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libgraphene_sys-5bdb5a83d991156d.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libgdk4_sys-31c3821240a17d34.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libgdk_pixbuf_sys-f5422c021bc0a568.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libpango_sys-cda733ad5228df0e.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libcairo_sys-8ca20fa4339cc124.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libgio_sys-8d826e89ce6341ab.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libwinapi-36f0e2a33a4dcadc.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libgobject_sys-0224a8d0bb925dac.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libglib_sys-d4d953120bd7f9eb.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\liblibc-c9f42970586606b0.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libfield_offset-3d49fddfbc4c51fd.rlib" "C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\libmemoffset-b1596fe374290b0e.rlib" "C:\\Users\\nicho\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libstd-2e5a4fde2066d4f2.rlib" "C:\\Users\\nicho\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libpanic_unwind-a4e0bcf1e60e2edb.rlib" "C:\\Users\\nicho\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_demangle-2d0f8274a5407337.rlib" "C:\\Users\\nicho\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libstd_detect-dc68e6f9c2985e79.rlib" "C:\\Users\\nicho\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libhashbrown-8bfb058d1afb96bd.rlib" "C:\\Users\\nicho\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libminiz_oxide-fe2fe9acb704bcf5.rlib" "C:\\Users\\nicho\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libadler-4e20259a2e504a61.rlib" "C:\\Users\\nicho\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_std_workspace_alloc-ba723ab4066a2120.rlib" "C:\\Users\\nicho\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libunwind-f9ca31420ed0b54e.rlib" "C:\\Users\\nicho\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcfg_if-753c3a361b9abd1c.rlib" "C:\\Users\\nicho\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\liblibc-22cf67e3a026b780.rlib" "C:\\Users\\nicho\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\liballoc-4bacd70ae093a213.rlib" "C:\\Users\\nicho\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_std_workspace_core-2823e3c97f1346a4.rlib" "C:\\Users\\nicho\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcore-2e984cab75d078cb.rlib" "C:\\Users\\nicho\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcompiler_builtins-c045e84c0343a063.rlib" "gobject-2.0.lib" "gtk-4.lib" "pangocairo-1.0.lib" "pangoft2-1.0.lib" "pangowin32-1.0.lib" "pango-1.0.lib" "fribidi.lib" "harfbuzz.lib" "fontconfig.lib" "freetype.lib" "libpng16.lib" "gdk_pixbuf-2.0.lib" "cairo-gobject.lib" "cairo.lib" "graphene-1.0.lib" "gio-2.0.lib" "gobject-2.0.lib" "ffi.lib" "gmodule-2.0.lib" "glib-2.0.lib" "intl.lib" "zlib1.lib" "gtk-4.lib" "pangocairo-1.0.lib" "pangoft2-1.0.lib" "pangowin32-1.0.lib" "pango-1.0.lib" "fribidi.lib" "harfbuzz.lib" "fontconfig.lib" "freetype.lib" "libpng16.lib" "gdk_pixbuf-2.0.lib" "cairo-gobject.lib" "cairo.lib" "graphene-1.0.lib" "gio-2.0.lib" "gobject-2.0.lib" "ffi.lib" "gmodule-2.0.lib" "glib-2.0.lib" "intl.lib" "zlib1.lib" "graphene-1.0.lib" "gobject-2.0.lib" "glib-2.0.lib" "intl.lib" "ffi.lib" "gtk-4.lib" "pangocairo-1.0.lib" "pangoft2-1.0.lib" "pangowin32-1.0.lib" "pango-1.0.lib" "fribidi.lib" "harfbuzz.lib" "fontconfig.lib" "freetype.lib" "libpng16.lib" "gdk_pixbuf-2.0.lib" "cairo-gobject.lib" "cairo.lib" "graphene-1.0.lib" "gio-2.0.lib" "gobject-2.0.lib" "ffi.lib" "gmodule-2.0.lib" "glib-2.0.lib" "intl.lib" "zlib1.lib" "gdk_pixbuf-2.0.lib" "gio-2.0.lib" "gobject-2.0.lib" "ffi.lib" "gmodule-2.0.lib" "glib-2.0.lib" "intl.lib" "zlib1.lib" "pango-1.0.lib" "harfbuzz.lib" "gio-2.0.lib" "gobject-2.0.lib" "ffi.lib" "gmodule-2.0.lib" "glib-2.0.lib" "intl.lib" "fribidi.lib" "fontconfig.lib" "freetype.lib" "zlib1.lib" "libpng16.lib" "cairo.lib" "cairo-gobject.lib" "cairo.lib" "gobject-2.0.lib" "ffi.lib" "glib-2.0.lib" "intl.lib" "gio-2.0.lib" "gobject-2.0.lib" "ffi.lib" "gmodule-2.0.lib" "glib-2.0.lib" "intl.lib" "zlib1.lib" "advapi32.lib" "cfgmgr32.lib" "kernel32.lib" "user32.lib" "ws2_32.lib" "gobject-2.0.lib" "glib-2.0.lib" "intl.lib" "ffi.lib" "gobject-2.0.lib" "glib-2.0.lib" "intl.lib" "ffi.lib" "legacy_stdio_definitions.lib" "advapi32.lib" "userenv.lib" "kernel32.lib" "ws2_32.lib" "bcrypt.lib" "msvcrt.lib" "/NXCOMPAT" "/LIBPATH:C:\\Users\\nicho\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib" "/OUT:C:\\Users\\nicho\\Desktop\\Rust\\my-gtk-app\\target\\debug\\deps\\my_gtk_app.exe" "/OPT:REF,NOICF" "/DEBUG" "/NATVIS:C:\\Users\\nicho\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\intrinsic.natvis" "/NATVIS:C:\\Users\\nicho\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\liballoc.natvis" "/NATVIS:C:\\Users\\nicho\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\libcore.natvis" "/NATVIS:C:\\Users\\nicho\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\libstd.natvis"
  = note: LINK : fatal error LNK1181: cannot open input file 'gobject-2.0.lib'

Examining the link command arguments, it appears that the path to the GTK libraries is mucked up:
"/LIBPATH:C:gtk-buildgtkx64release/lib"

instead of
"/LIBPATH:C:\\gtk-build\\gtk\\x64\\release\\lib"

How do I resolve this?  (Could it be because I switched from MSYS2 build to the MSVC build of GTK?)

What's in the gobject-2.0.pc file you have?
MSVC and MinGW builds should both work fine.

C:\gtk-build\gtk\x64\release\lib\pkgconfig looks like this...
prefix=C:/gtk-build/gtk/x64/release
includedir=${prefix}/include
libdir=${prefix}/lib

Name: GObject
Description: GLib Type, Object, Parameter and Signal Library
Version: 2.72.4
Requires: glib-2.0
Requires.private: libffi >=  3.0.0
Libs: -L${libdir} -lgobject-2.0
Libs.private: -lintl
Cflags: -I${includedir}

It appears that the forward slashes are being dropped from the prefix, but why?
One of the other .pc files (cairo-png.pc) says "# On windows, the prefix is automagically build from the location of the .pc file".

I tried both single and double backslash.  Neither made a difference.
I think that I am using pkg-config.  I followed the instructions at https://www.gtk.org/docs/installations/windows/ to install the MSVC compatible gvsbuild.

What pkg-config are you using? pkg-config --version. What's the output of pkg-config --libs --cflags glib-2.0?

I am using pkg-config-lite 0.28.1 from https://sourceforge.net/projects/pkgconfiglite/
While this version is quite old, it is the version recommended here https://gtk-rs.org/gtk4-rs/stable/latest/book/installation_windows.html
After a many hours of messing around, I gave up on the MSVC install and replaced it with the GNU toolchain.  The GNU toolchain works for me.
Thanks @sdroege  and @nirbheek for the help.

Good morning.  A little late for this, but I've place effort on the same error found after updating vcpkg packages.
LINK : fatal error LNK1181: cannot open input file 'gobject-2.0.lib'

I'll go through the all the steps in order to clarify everything and resolve this for others.
Open up a command prompt as admin:
cmd.exe

Launch the vcvars for the c/c++ build tools:
"C:\msvc2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat"

Firstly, my vcpkg update/upgrade failed. So I needed to reinstall everything vcpkg...essentially openssl and gtk
https://vcpkg.io/en/getting-started.html
git clone https://github.com/Microsoft/vcpkg.git
.\vcpkg\bootstrap-vcpkg.bat
vcpkg install openssl:x64-windows
vcpkg install gtk:x64-windows

After doing the above two package installs, you'll end up with all this installed:
PS C:\dev\msys64\home\davidm\vcpkg> .\vcpkg list
atk:x64-windows                                   2.38.0#3            GNOME Accessibility Toolkit
brotli:x64-windows                                1.0.9#3             a generic-purpose lossless compression algorithm...
bzip2:x64-windows                                 1.0.8#3             bzip2 is a freely available, patent free, high-q...
bzip2[tool]:x64-windows                                               Builds bzip2 executable
cairo:x64-windows                                 1.17.6#4            Cairo is a 2D graphics library with support for ...
cairo[fontconfig]:x64-windows                                         build with fontconfig
cairo[freetype]:x64-windows                                           use the freetype font backend
cairo[gobject]:x64-windows                                            build gobject module
dirent:x64-windows                                1.23.2#1            Dirent is a C/C++ programming interface that all...
expat:x64-windows                                 2.5.0               XML parser library written in C
fontconfig:x64-windows                            2.14.1              Library for configuring and customizing font acc...
freetype:x64-windows                              2.12.1#2            A library to render fonts.
freetype[brotli]:x64-windows                                          Support decompression of WOFF2 streams
freetype[bzip2]:x64-windows                                           Support bzip2 compressed fonts.
freetype[png]:x64-windows                                             Support PNG compressed OpenType embedded bitmaps.
freetype[zlib]:x64-windows                                            Use zlib instead of internal library for DEFLATE
fribidi:x64-windows                               1.0.12              GNU FriBidi is an implementation of the Unicode ...
gdk-pixbuf:x64-windows                            2.42.9#3            Image loading library.
getopt-win32:x64-windows                          0.1#4               An implementation of getopt.
getopt:x64-windows                                0#2                 The getopt and getopt_long functions automate so...
gettext:x64-windows                               0.21#9              GNU gettext provides libintl and a set of tools ...
gettext[tools]:x64-windows                                            Build gettext tools
glib:x64-windows                                  2.74.1              Portable, general-purpose utility library.
gperf:x64-windows                                 3.1#4               GNU perfect hash function generator
graphene:x64-windows                              1.10.8              A thin layer of types for graphic libraries.
gtk:x64-windows                                   4.6.8               Portable library for creating graphical user int...
harfbuzz:x64-windows                              5.0.1#3             HarfBuzz OpenType text shaping engine
libepoxy:x64-windows                              1.5.10#1            Epoxy is a library for handling OpenGL function ...
libffi:x64-windows                                3.4.2#6             Portable, high level programming interface to va...
libiconv:x64-windows                              1.17                GNU Unicode text conversion
libjpeg-turbo:x64-windows                         2.1.4               libjpeg-turbo is a JPEG image codec that uses SI...
liblzma:x64-windows                               5.2.5#6             Compression library with an API similar to that ...
libpng:x64-windows                                1.6.38              libpng is a library implementing an interface fo...
libsass:x64-windows                               3.6.5#1             LibSass - Sass compiler written in C++
lzo:x64-windows                                   2.10#7              Lossless data compression library
openssl:x64-windows                               3.0.7#1             OpenSSL is an open source project that provides ...
pango:x64-windows                                 1.50.11             Text and font handling library.
pcre2:x64-windows                                 10.40               Regular Expression pattern matching using the sa...
pixman:x64-windows                                0.40.0#4            Pixman is a low-level software library for pixel...
pthread:x64-windows                               3.0.0#1             empty package, linking to other port
pthreads:x64-windows                              3.0.0#12            Meta-package that provides PThreads4W on Windows...
sassc:x64-windows                                 3.6.2               SassC is a wrapper around libsass (http://github...
tiff:x64-windows                                  4.4.0#1             A library that supports the manipulation of TIFF...
tiff[jpeg]:x64-windows                                                Support JPEG compression in TIFF image files
tiff[lzma]:x64-windows                                                Support LZMA compression in TIFF image files
tiff[zip]:x64-windows                                                 Support ZIP/deflate compression in TIFF image files
vcpkg-cmake-config:x64-windows                    2022-02-06#1
vcpkg-cmake-get-vars:x64-windows                  2022-09-04
vcpkg-cmake:x64-windows                           2022-10-30
vcpkg-tool-meson:x64-windows                      0.63                Meson build system
zlib:x64-windows                                  1.2.13              A compression library

With all that set up, launch powershell which will inherit all this environment:
powershell

set the VCPKG_ROOT environment variable where everything vcpkg is installed:
[Environment]::SetEnvironmentVariable("VCPKG_ROOT", "c:\dev\msys64\home\davidm\vcpkg", "Process")

Set the PATH to also have the vcpkg lib and vcpkg bin directories in there.  In the bin dir you'll find dll's.  In the lib dir you'll find .lib's.  Notice I placed them at the beginning for faster lib searches.
[Environment]::SetEnvironmentVariable("PATH", "C:\dev\msys64\home\davidm\vcpkg\installed\x64-windows\bin;C:\dev\msys64\home\davidm\vcpkg\installed\x64-windows\lib;C:\dev\msys64\home\davidm\vcpkg\installed\x64-windows\tools\openssl;C:\msvc2019\BuildTools\VC\Tools\MSVC\14.24.28314\bin\HostX64\x64;C:\msvc2019\BuildTools\MSBuild\Current\bin\Roslyn;C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64;C:\Program Files (x86)\Windows Kits\10\bin\x64;C:\msvc2019\BuildTools\\MSBuild\Current\Bin;C:\Windows\Microsoft.NET\Framework64\v4.0.30319;C:\msvc2019\BuildTools\Common7\IDE\;C:\msvc2019\BuildTools\Common7\Tools\;C:\ProgramData\Boxstarter;C:\Program Files\ImageMagick-6.9.3-Q16;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;c:\Program Files (x86)\Intel\iCLS Client\;c:\Program Files\Intel\iCLS Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;c:\Program Files (x86)\Hewlett-Packard\HP Performance Advisor;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files\Symantec.cloud\PlatformAgent\;C:\ProgramData\chocolatey\bin;C:\Go\bin;C:\Users\davidm\.cargo\bin;C:\Users\davidm\AppData\Local\Microsoft\WindowsApps;C:\Users\davidm\go\bin;C:\Git;C:\Git\bin;C:\pipeline_virtenv\Scripts;L:\3D\Maya\Maya2015\scriptLib\bin;C:\ffmpeg;C:\radare2;C:\Users\davidm\go\bin;C:\msvc2019\BuildTools\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin;C:\msvc2019\BuildTools\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja;C:\dev\msys64\mingw64\include;C:\dev\msys64\mingw64\bin;C:\dev\msys64\mingw64\lib;", "Process")

As of this morning, I needed to add some linker search flags at the cargo invocation command line because I didn't want to pollute my Cargo.toml with anything so Microsoft build specific.  So before we get this error right?
LINK : fatal error LNK1181: cannot open input file 'gobject-2.0.lib'

Well the following RUSTFLAGS with extra library search paths solves that problem:
[Environment]::SetEnvironmentVariable("RUSTFLAGS", "-Awarnings -L C:\dev\msys64\home\davidm\vcpkg\installed\x64-windows\bin -L C:\dev\msys64\home\davidm\vcpkg\installed\x64-windows\lib -L C:\dev\msys64\home\davidm\vcpkg\installed\x64-windows\tools\openssl", "Process")

Now build:
cargo build --release --verbose --verbose

Here's the output for my project for that last part:
Running `set CARGO=\\?\C:\Users\davidm\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\bin\cargo.exe&& set CARGO_BIN_NAME=rs-gtk-sgi-viewer&& set CARGO_CRATE_NAME=rs_gtk_sgi_viewer&& set CARGO_MANIFEST_DIR=C:\dev\msys64\home\davidm\rs-gtk-sgi-viewer&& set CARGO_PKG_AUTHORS=""&& set CARGO_PKG_DESCRIPTION=""&& set CARGO_PKG_HOMEPAGE=""&& set CARGO_PKG_LICENSE=""&& set CARGO_PKG_LICENSE_FILE=""&& set CARGO_PKG_NAME=rs-gtk-sgi-viewer&& set CARGO_PKG_REPOSITORY=""&& set CARGO_PKG_RUST_VERSION=""&& set CARGO_PKG_VERSION=0.1.0&& set CARGO_PKG_VERSION_MAJOR=0&& set CARGO_PKG_VERSION_MINOR=1&& set CARGO_PKG_VERSION_PATCH=0&& set CARGO_PKG_VERSION_PRE=""&& set CARGO_PRIMARY_PACKAGE=1&& set PATH="C:\dev\msys64\home\davidm\rs-gtk-sgi-viewer\target\release\deps;C:\Users\davidm\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\bin;C:\Users\davidm\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\bin;C:\dev\msys64\home\davidm\vcpkg\installed\x64-windows\bin;C:\dev\msys64\home\davidm\vcpkg\installed\x64-windows\lib;C:\dev\msys64\home\davidm\vcpkg\installed\x64-windows\tools\openssl;C:\msvc2019\BuildTools\VC\Tools\MSVC\14.24.28314\bin\HostX64\x64;C:\msvc2019\BuildTools\MSBuild\Current\bin\Roslyn;C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64;C:\Program Files (x86)\Windows Kits\10\bin\x64;C:\msvc2019\BuildTools\\MSBuild\Current\Bin;C:\Windows\Microsoft.NET\Framework64\v4.0.30319;C:\msvc2019\BuildTools\Common7\IDE\;C:\msvc2019\BuildTools\Common7\Tools\;C:\ProgramData\Boxstarter;C:\Program Files\ImageMagick-6.9.3-Q16;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;c:\Program Files (x86)\Intel\iCLS Client\;c:\Program Files\Intel\iCLS Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;c:\Program Files (x86)\Hewlett-Packard\HP Performance Advisor;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files\Symantec.cloud\PlatformAgent\;C:\ProgramData\chocolatey\bin;C:\Go\bin;C:\Users\davidm\.cargo\bin;C:\Users\davidm\AppData\Local\Microsoft\WindowsApps;C:\Users\davidm\go\bin;C:\Git;C:\Git\bin;C:\pipeline_virtenv\Scripts;L:\3D\Maya\Maya2015\scriptLib\bin;C:\ffmpeg;C:\radare2;C:\Users\davidm\go\bin;C:\msvc2019\BuildTools\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin;C:\msvc2019\BuildTools\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja;C:\dev\msys64\mingw64\include;C:\dev\msys64\mingw64\bin;C:\dev\msys64\mingw64\lib;"&& rustc --crate-name rs_gtk_sgi_viewer --edition=2021 src\main.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --crate-type bin --emit=dep-info,link -C opt-level=3 -C embed-bitcode=no -C metadata=4a0e4ab7fa25d8d8 --out-dir C:\dev\msys64\home\davidm\rs-gtk-sgi-viewer\target\release\deps -L dependency=C:\dev\msys64\home\davidm\rs-gtk-sgi-viewer\target\release\deps --extern cascade=C:\dev\msys64\home\davidm\rs-gtk-sgi-viewer\target\release\deps\libcascade-1136efcd5e386dfb.rlib --extern gdk_pixbuf=C:\dev\msys64\home\davidm\rs-gtk-sgi-viewer\target\release\deps\libgdk_pixbuf-a48a2d3171d325e4.rlib --extern gtk=C:\dev\msys64\home\davidm\rs-gtk-sgi-viewer\target\release\deps\libgtk4-cf5a0f54a54c4644.rlib --extern gtk4_sys=C:\dev\msys64\home\davidm\rs-gtk-sgi-viewer\target\release\deps\libgtk4_sys-f3d0af49662df0de.rlib --extern nom=C:\dev\msys64\home\davidm\rs-gtk-sgi-viewer\target\release\deps\libnom-ea8ba4b017af0565.rlib --extern num_derive=C:\dev\msys64\home\davidm\rs-gtk-sgi-viewer\target\release\deps\num_derive-7994ef997e02f355.dll --extern num_traits=C:\dev\msys64\home\davidm\rs-gtk-sgi-viewer\target\release\deps\libnum_traits-81ce160edbf9e2ed.rlib --extern pretty_hex=C:\dev\msys64\home\davidm\rs-gtk-sgi-viewer\target\release\deps\libpretty_hex-a12d8acf580c813b.rlib -Awarnings -L C:\dev\msys64\home\davidm\vcpkg\installed\x64-windows\bin -L C:\dev\msys64\home\davidm\vcpkg\installed\x64-windows\lib -L C:\dev\msys64\home\davidm\vcpkg\installed\x64-windows\tools\openssl -L native=C:/dev/msys64/mingw64/bin/../lib -L native=C:/dev/msys64/mingw64/bin/../lib -L native=C:/dev/msys64/mingw64/bin/../lib -L native=C:/dev/msys64/mingw64/bin/../lib -L native=C:/dev/msys64/mingw64/bin/../lib -L native=C:/dev/msys64/mingw64/bin/../lib -L native=C:/dev/msys64/mingw64/bin/../lib -L native=C:/dev/msys64/mingw64/bin/../lib -L native=C:/dev/msys64/mingw64/bin/../lib -L native=C:/dev/msys64/mingw64/bin/../lib -L native=C:/dev/msys64/mingw64/bin/../lib -L native=C:/dev/msys64/mingw64/bin/../lib`
    Finished release [optimized] target(s) in 4m 44s

Done.
I hope this helps others. Cheers.


cmd/gc: x op= y is not always equivalent to x = x op y.

From the specs

An assignment operation x op= y where op is a binary arithmetic operation is equivalent to x = x op y but evaluates x only once.

This program
package main

import "fmt"

func main() {
	a := 0.5
	a = a * 2 / 3
	fmt.Println(a)

	b := 0.5
	b *= 2 / 3
	fmt.Println(b)
}

Outputs
0.3333333333333333
0

(Issue originally submited by @crmackay as #11158, but closed and locked, hence resubmitting here.)

The spec say:

Binary operators of the same precedence associate from left to right. For instance, x / y * z is the same as (x / y) * z.

So one is  (a*2)/3 and the other is a*(2/3)
While it is surprising,  I think this is the correct behavior.
func main() {
    a := 0.5
    a = a * 2 + 3
    fmt.Println(a)

    b := 0.5
    b *= 2 + 3
    fmt.Println(b)
}

This should not print the same value. If you think the problem is elsewhere, it would be good to be more specific.

@champioj I see and I am confused (and probably wrong).
It surprises me that this program
package main

import (
	"fmt"
)

func main() {
	fmt.Println(1.234 * 5 / 7)
	fmt.Println(5 / 7 * 1.234)
}

outputs
0.8814285714285715
0

From the specs:

Constant expressions are always evaluated exactly; intermediate values and the constants themselves may require precision significantly larger than supported by any predeclared type in the language.

But the reason seems to be

Except for shift operations, if the operands of a binary operation are different kinds of untyped constants, the operation and, for non-boolean operations, the result use the kind that appears later in this list: integer, rune, floating-point, complex.

With the explicit specs example

const b = 15 / 4           // b == 3     (untyped integer constant)

@cznic Your observation is correct. If you change your program to http://play.golang.org/p/PxBAbmlIiU you get the same result in both cases:
1.234 * 5 / 7 is the same as (1.234 * 5) / 7, where / is a floating-point division (resulting in a fractional value)
5 / 7 * 1.234 is the same as (5 / 7) * 1.234, where / is an integer division (since 5, 7 are integer literals), resulting in 0.
If you make the 5 a float (5. or 5.0) you get the same results on both lines.
Working as intended.

I agree that gc's current behavior of treating "x *= 2 / 3" like "x = x * (2 / 3)" seems correct/intuitive, but does the spec actually explain that unambiguously?  I don't see anything that rules out @cznic's expectation that it should have instead behaved like "x = (x * 2) / 3".
The simplest fix seems to be to clarify that "x op= y" is equivalent to "x = x op (y)".

@mdempsky The English wording is not to be taken as a "macro expansion" of y but I agree it's unclear. Change pending. Thanks for pointing this out.

@mdempsky That's a nice suggestion and I see @griesemer has already implemented it. Thanks to both of you.

I just stopped reading after the word exactly, as I automatically, but wrongly, assumed it naturaly implies arithmetic commutativity/associativity is granted for the whole expression - as is the case with exact/symbolic arithmetics, like seen in Maxima or Mathematica or any other CAS.
I learned that actually the specified exactness works granularly - for every [binary] operation in particular, but then the intermediate result is possibly turned inexact by applying a specific domain, eg. ℤ - with the loss of arithmetic commutativity and/or associativity.
I can see the reason for this difference wrt to "ideal" const expression evaluation and I'm fine with it.
Thanks again to all for the explanation.

@cznic somewhat related: #10931.


not compatible Silex 2.x

hello,
your demo is not compatible Silex 2.x,
it would be good to mention it in the readme.txt,
or do the updates,
thank you
Silex 1.x
use Silex\ServiceProviderInterface;
Silex 2.x
use Pimple\ServiceProviderInterface;

The required Silex version is indicated in the installation section: "silex/silex": "~1.0",

@josedacosta There is a fork of this library which is meant to be compatible with Silex 2.x, https://github.com/atphp/silex-oauth
I have tried this fork but it does not appear to work with Silex 2.0. The reason it does not work is because:
The documentation says that the OAuthServiceProvider should be registered before the SecurityServiceProvider for obvious reasons, as the oauth authentication listener needs to be registered. However, the OAuthServiceProvider makes use of the $app['security'] context which will not exist until the SecurityServiceProvider has been registered.
I have not yet found a way around this problem, maybe the original author of this library may have some suggestions.

The constructor signature has actually changed for Silex 2.x, you now have to pass in $app['security.token_storage'] instead of $app['security']. That was the missing part of the puzzle.
I've created a 2.0.x branch (aliased to dev-master or 2.0@dev) which works with Silex 2.x and Pimple 3.0. Let me know if it works for you.

Thanks @gigablah, I'll give it a try!


Roll Flutter Engine from a63bd854ac5a to e012dc8251ee (1 revision)

https://github.com/flutter/engine/compare/a63bd854ac5a...e012dc8251ee
2022-12-29<EMAIL_ADDRESS>[Windows] Add engine builder to simplify tests (flutter/engine#38546)
If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-engine-flutter-autoroll
Please CC<EMAIL_ADDRESS>on the revert to ensure that a human
is aware of the problem.
To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose
To report a problem with the AutoRoller itself, please file a bug:
https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug
Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md

Commit queue failed; closing this roll.


Add an option to disable configuring Rust cache

This adds additional input cache that determines if Swatinem/rust-cache is configured. Closes #3.

Thanks, that looks great :)


Remove uses of the @electron/remote and switch on Chromium Sandboxing

(Taken from the description of #1456 - capturing as a separate card so that we don't lose track of this important thought process)

As a next step, we should try to follow Electron best practices and remove uses of the @electron/remote module from the recipes and switch on Chromium sandboxing, but that will be even more involved. An additional valuable resource is the Electron security guide.

Just created 2 PRs to finish these cleanups:
https://github.com/getferdi/recipes/pull/674
https://github.com/getferdi/ferdi/pull/1869 - this one needs to go in first.

Closing this since the 2 PRs have been merged.

Issue is reopened because we removed deprecated remote module of electron in favor of @electron/remote BUT issue is about removing @electron/remote and enabling sandboxing to follow electron security best practices.

@mhatvan - Based on the latest PRs, wouldn't the dependency on @electron/remote also be called as "removed"?
I do agree that the enabling of sandboxing is still an outstanding task to be completed.

Removed for recipes yes, but not all occurrences which would be the best practice according to: https://nornagon.medium.com/electrons-remote-module-considered-harmful-70d69500f31

Looks like this is the only outstanding reference? https://github.com/getferdi/ferdi/blob/develop/src/api/server/ServerApi.js#L14

There seem to be plenty of references to @electron/remote:
package.json
66:    "@electron/remote": "1.2.1",

package-lock.json
2393:    "@electron/remote": {
2395:      "resolved"<EMAIL_ADDRESS>
src/stores/SettingsStore.js
2:import { getCurrentWindow } from '@electron/remote';

src/stores/UIStore.ts
3:import { nativeTheme, systemPreferences } from '@electron/remote';

src/stores/UserStore.js
5:import { session } from '@electron/remote';

src/models/Service.js
3:import { webContents } from '@electron/remote';

src/lib/TouchBar.js
2:import { TouchBar, getCurrentWindow } from '@electron/remote';

src/features/workspaces/components/WorkspaceDrawerItem.js
1:import { Menu, getCurrentWindow } from '@electron/remote';

src/index.js
11:require('@electron/remote/main').initialize();

src/stores/AppStore.js
9:} from '@electron/remote';

src/lib/Menu.js
2:import { app, Menu, dialog, systemPreferences } from '@electron/remote';

src/features/serviceProxy/index.js
2:import { session } from '@electron/remote';

src/webview/sessionHandler.ts
1:import { getCurrentWebContents } from '@electron/remote';

src/webview/spellchecker.ts
1:import { getCurrentWebContents } from '@electron/remote';

src/webview/find.js
4:// Shim to expose webContents functionality to electron-find without @electron/remote

src/webview/contextMenuBuilder.js
11:import { Menu, MenuItem } from '@electron/remote';

src/webview/contextMenu.js
1:import { getCurrentWebContents } from '@electron/remote';

src/webview/lib/RecipeWebview.js
2:import { BrowserWindow } from '@electron/remote';

src/features/quickSwitch/Component.js
2:import { getCurrentWindow } from '@electron/remote';

src/api/server/LocalApi.ts
2:import { session } from '@electron/remote';

src/api/server/ServerApi.js
14:import { require as remoteRequire } from '@electron/remote';

src/components/auth/Locked.js
1:import { systemPreferences } from '@electron/remote';

src/components/settings/supportFerdi/SupportFerdiDashboard.js
3:import { BrowserWindow } from '@electron/remote';

src/components/settings/settings/EditSettingsForm.js
1:import { systemPreferences } from '@electron/remote';

src/components/services/tabs/TabItem.js
1:import { Menu, dialog, app, getCurrentWindow } from '@electron/remote';

In general, we'd need to remove all references from src/webview so that we can turn on sandboxing for the service webviews. This means all communication from the recipes to Ferdi should go through custom electron IPC messages.
As an example, look at src/webview/spellchecker.ts. Here, the code running in the service webview isolated world is setting up the spell checker via getCurrentWebContents in the remote module. This mean the remote module creates a proxy object from the WebContents and the Session for the service webview inside the service webview, which communicates with the electron main process, where the actual WebContents and Session objects resides. This is 1. somewhat insecure 2. massively slow.
To fix this, we'd need to add handling for a custom IPC message in the electron main process, where we do the same setup, but without the remote module overhead. Note that preloaded scripts in the isolated world can send IPC messages to the main process even if sandboxing is enabled (otherwise, sandboxed webviews couldn't interact with rest of the app at all).
Removing references to the remote module from stuff running in the top-level Ferdi renderer process (i.e., the BrowserWindow) is also possible this way, but less critical. Current, Ferdi is set up so that all the application-level logic is in the top-level renderer process, not the main process. Compare src/index.js, which runs in the main process and handles IPC messages, vs src/app.js, which runs in the top-level renderer process. All the models, stores, reactions, etc. are set up in the src/app.js and it is fully trusted (i.e., a part of Ferdi). So there's little point in sandboxing it (it can basically do anything, since it dictates the whole application logic). Instead, our focus should be on the service webviews, which run untrusted code (the scripts in the service webpage).
(I'm using top-level renderer in a very loose sense here. Actually, chromium renderer processes are not hierarchical, and the only communicate via IPC with the main process, not directly with each other. But the Webview objects for the services are instantiated in the document running in top-level BrowserWindow, so it makes some sense to call its renderer top-level. Certainly, if the top-level document removes a WebView, the corresponding renderer exits.)

Thanks for the great writeup @kris7t. To be more clearer, what are the occurrences that we will need to replace with ipc messages? (I understand the spellchecker is a good example, but "remove from src/webview seems to be too broad?)

At the very least these:
src/webview/sessionHandler.ts
1:import { getCurrentWebContents } from '@electron/remote';

src/webview/spellchecker.ts
1:import { getCurrentWebContents } from '@electron/remote';

src/webview/contextMenuBuilder.js
11:import { Menu, MenuItem } from '@electron/remote';

src/webview/contextMenu.js
1:import { getCurrentWebContents } from '@electron/remote';

src/webview/lib/RecipeWebview.js
2:import { BrowserWindow } from '@electron/remote';

plus there might be other libraries that rely on remote proxies internally, I'm not sure. src/webview/find.js illustrates the approach we need: add IPC message handler to the main process, then call them from the webview.


Initial development

Initial development. Includes tests (but not 100% test coverage as that's a bit extreme).
The docs should have enough information in it to make installation and usage simple for developers.
There are also examples in the examples/ directory.
To install and test locally:
git clone git@github.com:wagtail/wagtail-airtable.git # Into your wagtail project
pip install -e wagtail-airtable/
# Follow install steps in docs (may require a free Airtable account)

To run the unit tests: cd wagtail-airtable/tests/ && python runtests.py

Currently, saving and exporting a page will add an explanatory error message if it fails. However, a bulk import does not (again, unless I'm missing something). Would it be possible to add this?

Yep, Django Messages (Wagtail notifications) have been added for Wagtail Pages. And in Wagtail 2.10 Snippets will have 3 hooks which will automatically be picked up on in this package, but models (snippets) won't have notifications until 2.10. There's no real way around that unless we modify all the places a snippet can be edited in the views/forms/templates.

I import a model from airtable. In my model's save() method, for instance, I override the value of a synchronised field. This model, because this is in the middle of an import, does not push this new value back to airtable. As a result, Wagtail and Airtable are now out of sync. Is this scenario possible?

I just tested this, and as long as super() is called after the values are changed, this continues to work as expected.
    def save(self, *args, **kwargs):
        self.over_write_this = 'Lorem Ipsum'
        return super().save(*args, **kwargs)

☝ That successfully overwrites the saved value, and updates Airtable with "Lorem Ipsum".


Extra tab characters being inserted

The arrows are pointing to places where the image and text should not be separated because there should be a non-breaking space separating them. However, the string is ending up looking like this:
\U0000fffc\tseparated

In other words, [replacement character][tab character][“separated”]
This is on iOS 8.4 and 9.1 simulators built with Xcode 7.1. Need to investigate whether this is a regression, fix it, and add unit tests to make sure it stays fixed.

Closed by #81.


Refactor for asynchronous saving

There's a bunch here and I'm happy to explain any of it. I also totally understand if this is not a solution you're looking for. Feel free to use this as inspiration for a different solution. I won't be offended at all.

When saving a document, Nova would save the file, then Black would
apply the formatting after the save. This left the document as unsaved
after an explicit save. To ensure that nova waits for the Black
process to finish, Nova's onWillSave method needs to return a Promise.
It will wait for 5 seconds while that promise resolves, ensuring that
the document will be reformatted first and saved second. This refactor
attempts just that.
The main refactor is around the execute method of BlackProcess and the
format method of Formatter. execute now returns a promise. If the
promise resolves, it passes the formatted text to the formatter, which
calls the edit function on the document to make the change. If the
promise rejects it represents a failure in some way. The formatter
catches this rejection and creates a notification for the user. It's
often (but not always) the case that the error is something the user
would want to know about, like a malformed python document.
This also

Formatted the edited files through Prettier
removed didExit from BlackProcess
Removed some unused async declarations from BlackProcess
Formatter returns the results of BlackProcess.execute
main returns the result of Formatter.format

Fixes #1

(Sorry for the late reply, we're deep into the long summer holidays here.)
This is wonderful, thanks for looking into this. I'm happy to merge this, but first I wonder if I could be a pain and ask you to split the changes out into separate commits. At the moment it's hard to see the changes required to support asynchronous saving due to the lines altered purely for formatting. I'd prefer it if there were two commits, one for async support and one for formatting.
I think this might mean a new pull request — sorry! — but do you think you have the time to do that before a merge?

I've finally got around to looking at this again and I removed the Prettier formatting changes in 8677044c3291. There's no problem with the formatting itself of course, I just have a preference for atomic commits.
The problem I have now, unfortunately, is that I neither write much Python code nor do I use Nova. I don't even have a Python environment set up on my laptop 😭. But I'll try and test this soon and get a new version of the extension up on panic.com.


refactor StellarGradebook code

Refactor the StellarGradebook code into Client, Base, Membership, and Gradebook classes.  The intent of this PR is simply to separate the code into separate classes, nothing more.  If this PR is reviewed as something more comprehensive, I'd prefer to resubmit the PR so that it specifically identifies the broader goal.
Addresses #7, #8, #9, and #10.
This PR is ready for review.  @pdpinch @carsongee

Looks like you have some pep-8 stuff to deal with

https://github.com/mitodl/PyLmod/blob/feature/refactor-stellargradebook/pylmod/stellargradebook.py should no longer be here, and we should see it being removed from the diff.  It has the added benefit that we can see better which pieces got moved where.

In my enthusiasm to get this committed I left numerous pylint and pep8 errors.  I'm working on those now.  I really only wanted to verify that code is split up properly for this PR.

No problem, it is just hard to tell without stellargradebook.py being deleted if you could commit that real quick I can ignore the style problems

I'd like eyes on this line: https://github.com/mitodl/PyLmod/pull/11/files#diff-a2ca8308d9281e045010f13ce409eb81R76
get_gradebook_id() is called in base.py.init() but properly belongs in the Gradebook class.  Since Gradebook inherits Base, it sounds like a endless loop to have init() call it from Base.

Sure, so nothing in base.py uses that property and that initialization should move to the gradebook class __init__ method which should call it's super __init__

I'm happy to merge after those last few comments are addressed. What a long strange trip... :snake:


Added loader while data is fetched

Loader will apper on data fetch and on manually searching city. #116

please add the screenshot of the ui change or loader

please add the screenshot of the ui change or loader

please resolve conflicts

data is fetched in very less time so no need to add loader it will increase the time

data is fetched in very less time so no need to add loader it will increase the time

less time for fast internet, since loader is pure CSS no extra time is required.
For conflicts: they happened after my PR.


modifed readme by allen

Q
A

Bug fix?
no - yes?

New feature?
no - yes?

New sample?
no - yes?

Related issues?
fixes #X, partially #Y, mentioned in #Z

What's in this Pull Request?
Please describe the changes in this PR. Sample description or details around bugs which are being fixed.
Guidance
You can delete this section when you are submitting the pull request.

Please update this PR information accordingly. We'll use this as part of our release notes in monthly communications.
Please target your PR to 'dev' branch.

Thanks for your contribution! Sharing is caring.

This seems like a small (but important) contribution, so no Contribution License Agreement is required at this point. We will now review your pull request.
Thanks,
Microsoft Pull Request Bot

sorry, I took this action by mistake.


Handmerge of TerribleNews/geos-patch

NOTE
This is a hand-merge version of #1166 by @TerribleNews due to the age of that PR versus newer MAPL. I'll repeat all the text from there. Unfortunately, this means @TerribleNews might not get the commit credit!

Description

This change adds a time loop to CapGridComp run the clock forward before the time loop that actually executes the grid components. There are also some small changes to handle issues with alarms not ringing properly in reverse.
Related Issue

Fixes #1144
Motivation and Context

This feature is to support to adjoint development in GCHP, which requires running the model in reverse. There may be other advantages to a generic capability to run MAPL in reverse as well.
This will be my first merge request to the team, so I am submitting mostly to start the conversation and get guidance / feedback.
How Has This Been Tested?

Unfortunately, because GCHP uses a fork of MAPL it is non-trivial to test code changes with the latest version. All these changes are patterned after changes that have been tested in GCHP using the verison of MAPL that is there, which is based on 2.6.3. Is there a way for me to test these exact changes?
Types of changes

[ ] Bug fix (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)
[ ] Trivial change (affects only documentation or cleanup)

Checklist:

[ ] I have tested this change with a run of GEOSgcm (if non-trivial)
[x] I have added one of the required labels (0 diff, 0 diff trivial, 0 diff structural, non 0-diff)
[x] I have updated the CHANGELOG.md accordingly following the style of Keep a Changelog

Probably need someone like @tclune or @atrayano to look at this. Isn't building at all.

I'm glad this is finally happening, thanks for all the notes. I will try to apply these changes and then do I will have to submit a new pull request?

@TerribleNews have you had a chance to work on this?


[video_player] Explicitly indicate that self should be retained

Description
Fixes the implicit-retain-self warnings that otherwise prints whenever you build this project:
video_player-0.10.0+4/ios/Classes/VideoPlayerPlugin.m:89:55: warning: block implicitly retains 'self'; explicitly mention 'self' to
      indicate this is intended behavior [-Wimplicit-retain-self]
                                                  if (_isLooping) {
                                                      ^
                                                      self->
video_player-0.10.0+4/ios/Classes/VideoPlayerPlugin.m:93:57: warning: block implicitly retains 'self'; explicitly mention 'self' to
      indicate this is intended behavior [-Wimplicit-retain-self]
                                                    if (_eventSink) {
                                                        ^
                                                        self->
video_player-0.10.0+4/ios/Classes/VideoPlayerPlugin.m:94:55: warning: block implicitly retains 'self'; explicitly mention 'self' to
      indicate this is intended behavior [-Wimplicit-retain-self]
                                                      _eventSink(@{@"event" : @"completed"});
                                                      ^
                                                      self->
video_player-0.10.0+4/ios/Classes/VideoPlayerPlugin.m:188:15: warning: block implicitly retains 'self'; explicitly mention 'self' to
      indicate this is intended behavior [-Wimplicit-retain-self]
          if (_disposed) return;
              ^
              self->
video_player-0.10.0+4/ios/Classes/VideoPlayerPlugin.m:192:13: warning: block implicitly retains 'self'; explicitly mention 'self' to
      indicate this is intended behavior [-Wimplicit-retain-self]
            _preferredTransform = [self fixTransform:videoTrack];
            ^
            self->
video_player-0.10.0+4/ios/Classes/VideoPlayerPlugin.m:198:56: warning: block implicitly retains 'self'; explicitly mention 'self' to
      indicate this is intended behavior [-Wimplicit-retain-self]
                [self getVideoCompositionWithTransform:_preferredTransform
                                                       ^
                                                       self->
6 warnings generated.

Checklist
Before you create this PR confirm that it meets all requirements listed below by checking the relevant checkboxes ([x]). This will ensure a smooth and quick review process.

[x] I read the Contributor Guide and followed the process outlined there for submitting PRs.
[ ] My PR includes unit or integration tests for all changed/updated/fixed behaviors (See Contributor Guide).
[x] All existing and new tests are passing.
[x] I updated/added relevant documentation (doc comments with ///).
[ ] The analyzer (flutter analyze) does not report any problems on my PR.
[x] I read and followed the Flutter Style Guide.
[x] The title of the PR starts with the name of the plugin surrounded by square brackets, e.g. [shared_preferences]
[n/a] I updated pubspec.yaml with an appropriate new version according to the pub versioning philosophy.
[ ] I updated CHANGELOG.md to add a description of the change.
[x] I signed the CLA.
[x] I am willing to follow-up on review comments in a timely manner.

Breaking Change
Does your PR require plugin users to manually update their apps to accommodate your change?

[ ] Yes, this is a breaking change (please indicate a breaking change in CHANGELOG.md and increment major revision).
[x] No, this is not a breaking change.

Some questions:

Should these small changes be mentioned in the changelog? I'd be happy to add an entry if so
Should I bump the version for this small change? Since it only silenced a warning I didn't think it appropriate
There is a checkbox about adding tests, is there a way to turn this warning into an error so that it doesn't come up again? 🤔

@collinjackson could you also publish it on pub?

It is published


blocking not working in new tab

If you right click on some imap subfolder and select 'open in new tab'.
In new tab drag&drop isn't disabled at all.

Thank you for feedback!
I fixed the issue in v5.3.0. You can download the xpi from here.
https://github.com/pqrs-org/disable-draganddrop-tb/releases/tag/v5.3.0
The v5.3.0 is under review on the Thunderbird add-on site, so it will take a little more time before it gets updated.
https://addons.thunderbird.net/en-US/thunderbird/addon/disable-draganddrop-tb-v2/

It's working. Thank you! :)


[upgrade] Provide repos for cloud 7 in upgrade QA job

Part of upgrade UI tests

Successful build at https://ci.suse.de/view/Cloud/view/QA/job/cloud-mkphyscloud-qa-test-upgrade-ui/35/console


rpc+tarocli: Implement method to decode proofs into human-readable format

Related to https://github.com/lightninglabs/taro/issues/180
Would be nice to be able to view proofs in human readable format (https://github.com/lightninglabs/taro/blob/main/proof/proof_test.go#L127); this will make it easier for individuals to wrap their mind around the mental model of proofs, and what they contain, and ideally accelerate universe development
Able to access some of the raw data!
edit: here is sample output as of now:
taro % tarocli proofs decode --proof_file habibtaro_usd_jan2.json
{
    "proof_index": "0",
    "asset": {
        "version": 0,
        "asset_genesis": {
            "genesis_point": "3dea4202dc504302a68fa598ed6ade31f83fdc3a58b095f4d6259587fa48dea0:1",
            "name": "habibtaro_usd_jan_noem23",
            "meta": "68616269627461726f2e636f6d5f6a616e5f6e6f656d3233",
            "asset_id": "8074f97dc3f2a5c3375ddaccf66ffc0bd1fbdd0b8261ee536a1bc9653c0d9f0b",
            "output_index": 0,
            "genesis_bootstrap_info": "a0de48fa879525d6f495b0583adc3ff831de6aed98a58fa6024350dc0242ea3d000000011868616269627461726f5f7573645f6a616e5f6e6f656d32331868616269627461726f2e636f6d5f6a616e5f6e6f656d32330000000000",
            "version": 0
        },
        "asset_type": "NORMAL",
        "amount": "21000000",
        "lock_time": 0,
        "relative_lock_time": 0,
        "script_version": 0,
        "script_key": "020c7b5c4abd3b7cbe48a1cb8193312233924f22cfdc07e9c64a7f867cca3b5a3e",
        "asset_group": {
            "raw_group_key": null,
            "tweaked_group_key": "0253c2de331021b68632d5cb76110d4a65e4436f7762e47b8af058641012694110",
            "asset_id_sig": "cb61c6c21047b288e116880cb6abf941c754127a113e081e14b65cf834f445325817c4be9cdd44703e05b3a0d60adf10392b454814f89635e9339ae0f55fced8"
        },
        "chain_anchor": {
            "anchor_tx": "02000000000101a0de48fa879525d6f495b0583adc3ff831de6aed98a58fa6024350dc0242ea3d0100000000ffffffff02e803000000000000225120593814466c8ae931db5a335f62737d1f5979f7f1fa0d3b75de38c1bc356b584927d2570000000000225120951d666ae736743e5dfe8eaeaad80039f689df429bf0220dd245d1938dc21cfb0140a392cedef28b6efdb26dc31f354a8633ca6301aef94e8f55ed772f6a2fbb9673735a0f80a68d10dc57980560f94a98d1fc2b480b447818a6039ac0229139eea500000000",
            "anchor_txid": "986c8f9263aa5a0d1d6733019bc8660216b3e6a3380c38b73e39811881c677bd",
            "anchor_block_hash": "000000000004479a4e6a788f3994069b2c15b3b61b00673fd8a099323f4f6e78",
            "anchor_outpoint": "986c8f9263aa5a0d1d6733019bc8660216b3e6a3380c38b73e39811881c677bd:0",
            "internal_key": null
        }
    },
    "tx_merkle_proof": "06912174fe872bb334e87038d02313e51f85e76442f79b73b04e0c10b3330c84c2b2dc73a43a0cadf17126b05122e6a54f2375572e5bb4f4d02b9fd7b2d3741ede711f85425cd99a2fd0a2b7b735de769274f44d3564105fc2829821c69f37e111be624fc946a60f91f90b4d7462581bca9790ad6099e1effb271733a9ec7231fbd04772186e38be31da8c88d457753455778ee96ab60a76f44c1e4065e374a3e06bfc6be5cc665baf7d81dd617ec34b0e6cd91252f8a46221763aedb35872fef738",
    "inclusion_proof": "00040000000001210285127fca8f36e75b0508e6a6a561ab5db97003523f227596bc4f7be436a9b7a402c400490001000120343934bd45c74d19ae43f6034b639f70232264ad03d7b02555b5a3f478cfbe9202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0177000100017200026b9241c6ff865f4be097261e3a4170e7ceceb7e51e7565b9a5b692fc6a9ad3d80000000001406f40e62fa07552a32c0fc1179e234f024ed3d833b924c773810e649d3da1ebae8b8d000000000280de80ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f",
    "exclusion_proofs": [
        "000400000001012102c17d96c48980a0f48932ac66819e6ddc86cce68edaae0179d66d94326ce130160303020101"
    ]
}

Answering the questions you posted:

Should we only return the last proof?

I think so. It's also possible to pass in an index, then we can seek to the desired index using this method: https://github.com/lightninglabs/taro/blob/main/proof/file.go#L203-L205

Should we return any of the merkle trees/additional information? Block header? Additional inputs?

I think the block header/height information would be useful. Then maybe a verbose option to include the serialized Bitcoin merkle proof as well as the series of inclusion (and exclusion) proofs?

Is the anchor tx available in proofs?
Yes, it's this field: https://github.com/lightninglabs/taro/blob/77b69191fc60c57135c70e25b338d5d401bfbb2b/proof/proof.go#L40-L42

Am I supposed to commit the go.mod/go.sum files?

Yeah, this commits the set of dependancies.

Think I need to fix taro.swagger.json, maybe missing other generated files?
Am I supposed to update the protoc-gen-go and protoc versions or leave that out?

If you do make rpc, then it should handle creating all the auto generated file diffs.
I'd leave those versions the same, since we pin to the same version so everyone generates the same set of protos.

@habibitcoin Any update on when we can expect this?

Thanks for the review @Roasbeef ! All makes sense
@dstadulis expecting to complete this over Thanksgiving holiday at latest

@jharveyb: review reminder
@habibitcoin, remember to re-request review from reviewers when ready

@Roasbeef I'm having a bit of trouble on

Then maybe a verbose option to include the serialized Bitcoin merkle proof as well as the series of inclusion (and exclusion) proofs?

What is the serialized Bitcoin merkle proof?

Would these fields ideally be output as bytes? If so, is this the proper way to do so:

var inclusionProofBuf bytes.Buffer
	if err := decodedProof.InclusionProof.Encode(&inclusionProofBuf); err != nil {
		return nil, fmt.Errorf("unable to encode inclusion proof: %w",
			err)
	}

For the exclusion proofs, would that be an array of bytes? Would that be done by:

repeated bytes exclusion_proofs

I believe everything else is implemented! Example output below:

What is the serialized Bitcoin merkle proof?

The field TxMerkleProof of type TxMerkleProof.

Would these fields ideally be output as bytes? If so, is this the proper way to do so:

Yes, that looks good. Seems like all the fields mentioned (TxMerkleProof,  InclusionProof and ExclusionProofs) have an Encode method.

For the exclusion proofs, would that be an array of bytes? Would that be done by:

Yes, repeated bytes exclusion_proofs sounds good on the RPC level.

Have a bug with block_height output*

Yes, the block_height should be a simple block number. But that information is not included in the proof, so you can't print it.

@roasbeef: review reminder

Latest output:
{
    "proof_index": "0",
    "anchor_outpoint": "e3dcdfe1f03821430a13742189af3a8c451635b113e852f690b4b59dd864a643:1",
    "anchor_tx": "063280c2cd2a1c1cf42cf2fc3fb21cd6660a097e22dadc8db5f733ce36216a3d",
    "block_header": "000000000000000d14419cb8be4dabdea503ed194be79e2c6063d2aefb1fb646",
    "block_height": "0000000000000015879d4297902849c42bd5f8b17cc48c43b9150321f7f845b2",
    "asset": {
        "version": 0,
        "asset_genesis": {
            "genesis_point": "e3dcdfe1f03821430a13742189af3a8c451635b113e852f690b4b59dd864a643:1",
            "name": "habibtaro",
            "meta": "68616269627461726f2e636f6d",
            "asset_id": "f30905681df0b8b6122ba38fbf3711d01ede2ba678cfbd4454486d7027972501",
            "output_index": 0,
            "genesis_bootstrap_info": "43a664d89db5b490f652e813b13516458c3aaf892174130a432138f0e1dfdce3000000010968616269627461726f0d68616269627461726f2e636f6d0000000000",
            "version": 0
        },
        "asset_type": "NORMAL",
        "amount": "21000000",
        "lock_time": 0,
        "relative_lock_time": 0,
        "script_version": 0,
        "script_key": "0206b93c43b8a85385e1f6021108901ef99eeb5a69378ec805dea8abc4a3fd868c",
        "asset_group": {
            "raw_group_key": null,
            "tweaked_group_key": "0337e043736df85040e97def7c8cdb55dc97f553348d24058167622b585630e178",
            "asset_id_sig": "a0e4d260effd6a4babaf8a00d6534e81a2801f6723d99af768cb1ca17202bf77525f16d04e70691bc8941fedf8bf06ba9f01ce95f19a19178ceaad39f8a29ba3"
        },
        "chain_anchor": {
            "anchor_tx": "0200000000010143a664d89db5b490f652e813b13516458c3aaf892174130a432138f0e1dfdce30100000000ffffffff02e803000000000000225120e1e23ab4aa5f26d54dd24be4401e8eb0e560a09a94a428481408fd53e404ae0bcdc1580000000000160014c7cfecd42c55786054ec4eaad71b2f62e68428fd024730440220321d45c17beb16a68f7ba8a23cf386de149f3b4b52082b58d555f2e08a9efbde02202a3ef23f5b1e8cd6241ae0ec3c922e48f858281cf7a9462d7e0bc4c218cff0350121030c999ac2ee7695f855f525b1a24e97d53ada26dfa4df83cbf40df173e38664d200000000",
            "anchor_txid": "3d6a2136ce33f7b58ddcda227e090a66d61cb23ffcf22cf41c1c2acdc2803206",
            "anchor_block_hash": "46b61ffbaed263602c9ee74b19ed03a5deab4dbeb89c41140d00000000000000",
            "anchor_outpoint": "e3dcdfe1f03821430a13742189af3a8c451635b113e852f690b4b59dd864a643:1",
            "internal_key": null
        }
    },
    "tx_merkle_proof": "038082936f2a9190fb7de3ef010e9a3354ca6e08aa2d88d1286c3a437b126084cfa3ab6bdd46c6fd76ebee5a65b106daf9acc26646299f4cf3468a49af16308d93d73b19aafc73920016b43b6458b9f63dfdd6329929052cf313817e9aeaf76f0d03",
    "inclusion_proof": "0004000000000121021b816b11a35a95aae3c59b314895ddd22e0f68ce6b1764b05d9f3928185672ad02740049000100012046690b2765ce8d60837116cd0150f6defd733b66df9f6d6caa47883fcd09bc7202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff012700010001220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
    "exclusion_proofs": [
    ]
}

Also thinking to just remove block height because there doesnt appear to be any easy way to extract this information

Also thinking to just remove block height because there doesnt appear to be any easy way to extract this information

Should just be available as a field: https://github.com/lightninglabs/taro/blob/f6a581b6395fe779db7cbb5a4536a39bb0440dbe/proof/file.go#L317-L318

@roasbeef: review reminder

@roasbeef: review reminder

@roasbeef: review reminder

Is this ready for another round @habibitcoin ?

@habibitcoin, remember to re-request review from reviewers when ready

Same issue https://github.com/lightninglabs/taro/pull/230 for AnchorBlockHash. Included that.
Ready for final review @Roasbeef !
taro % tarocli proofs decode --proof_file habibtaro_usd_jan2.json
{
    "proof_index": "0",
    "asset": {
        "version": 0,
        "asset_genesis": {
            "genesis_point": "3dea4202dc504302a68fa598ed6ade31f83fdc3a58b095f4d6259587fa48dea0:1",
            "name": "habibtaro_usd_jan_noem23",
            "meta": "68616269627461726f2e636f6d5f6a616e5f6e6f656d3233",
            "asset_id": "8074f97dc3f2a5c3375ddaccf66ffc0bd1fbdd0b8261ee536a1bc9653c0d9f0b",
            "output_index": 0,
            "genesis_bootstrap_info": "a0de48fa879525d6f495b0583adc3ff831de6aed98a58fa6024350dc0242ea3d000000011868616269627461726f5f7573645f6a616e5f6e6f656d32331868616269627461726f2e636f6d5f6a616e5f6e6f656d32330000000000",
            "version": 0
        },
        "asset_type": "NORMAL",
        "amount": "21000000",
        "lock_time": 0,
        "relative_lock_time": 0,
        "script_version": 0,
        "script_key": "020c7b5c4abd3b7cbe48a1cb8193312233924f22cfdc07e9c64a7f867cca3b5a3e",
        "asset_group": {
            "raw_group_key": null,
            "tweaked_group_key": "0253c2de331021b68632d5cb76110d4a65e4436f7762e47b8af058641012694110",
            "asset_id_sig": "cb61c6c21047b288e116880cb6abf941c754127a113e081e14b65cf834f445325817c4be9cdd44703e05b3a0d60adf10392b454814f89635e9339ae0f55fced8"
        },
        "chain_anchor": {
            "anchor_tx": "02000000000101a0de48fa879525d6f495b0583adc3ff831de6aed98a58fa6024350dc0242ea3d0100000000ffffffff02e803000000000000225120593814466c8ae931db5a335f62737d1f5979f7f1fa0d3b75de38c1bc356b584927d2570000000000225120951d666ae736743e5dfe8eaeaad80039f689df429bf0220dd245d1938dc21cfb0140a392cedef28b6efdb26dc31f354a8633ca6301aef94e8f55ed772f6a2fbb9673735a0f80a68d10dc57980560f94a98d1fc2b480b447818a6039ac0229139eea500000000",
            "anchor_txid": "986c8f9263aa5a0d1d6733019bc8660216b3e6a3380c38b73e39811881c677bd",
            "anchor_block_hash": "000000000004479a4e6a788f3994069b2c15b3b61b00673fd8a099323f4f6e78",
            "anchor_outpoint": "986c8f9263aa5a0d1d6733019bc8660216b3e6a3380c38b73e39811881c677bd:0",
            "internal_key": null
        }
    },
    "tx_merkle_proof": "06912174fe872bb334e87038d02313e51f85e76442f79b73b04e0c10b3330c84c2b2dc73a43a0cadf17126b05122e6a54f2375572e5bb4f4d02b9fd7b2d3741ede711f85425cd99a2fd0a2b7b735de769274f44d3564105fc2829821c69f37e111be624fc946a60f91f90b4d7462581bca9790ad6099e1effb271733a9ec7231fbd04772186e38be31da8c88d457753455778ee96ab60a76f44c1e4065e374a3e06bfc6be5cc665baf7d81dd617ec34b0e6cd91252f8a46221763aedb35872fef738",
    "inclusion_proof": "00040000000001210285127fca8f36e75b0508e6a6a561ab5db97003523f227596bc4f7be436a9b7a402c400490001000120343934bd45c74d19ae43f6034b639f70232264ad03d7b02555b5a3f478cfbe9202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0177000100017200026b9241c6ff865f4be097261e3a4170e7ceceb7e51e7565b9a5b692fc6a9ad3d80000000001406f40e62fa07552a32c0fc1179e234f024ed3d833b924c773810e649d3da1ebae8b8d000000000280de80ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f",
    "exclusion_proofs": [
        "000400000001012102c17d96c48980a0f48932ac66819e6ddc86cce68edaae0179d66d94326ce130160303020101"
    ]
}

Also 1 last question, wondering if I should include this is the same or a new PR: meta should not be displayed as bytes. It is sent in via CLI as a string, so should be output as the string:
"meta": "habibtaro.com_jan_noem23",
versus
 "meta": "68616269627461726f2e636f6d5f6a616e5f6e6f656d3233",

String seems much more useful?

@roasbeef: review reminder

Also 1 last question, wondering if I should include this is the same or a new PR: meta should not be displayed as bytes. It is sent in via CLI as a string, so should be output as the string:

I think for now can have it assume things are displayed as bytes, I'm making some changes to how the meta bytes are presented/transmitted in this PR: #249.

@habibitcoin can you check positiveblue's comments? Would love to include your PR in the taro v0.2 release.

@dstadulis almost done! Have addressed most comments locally. Mainly just need to add comments and tests now.
@positiveblue @Roasbeef any guidance on tests you can provide? My initial plan was to create a proofs_test.go file in itest and use assets_test as a bit of inspiration. Mint an asset, export it, verify the proof, and confirm the output matches that of the assets list CLI. Thoughts?

All done! Only thing is I'm struggling a bit on how/where to write tests. Similar functions, Import/Export proof do not have any integration tests so I'm a bit unsure on necessity, and also still unsure on pattern. Appreciate any guidance here!
Everything else should be addressed

@dstadulis ready for final review!

Thanks @guggero , all points addressed! Ready again

For the failed tests, 1 of them is related to postgres and seems unrelated?
2 of them seem odd:
if a.GroupKey != nil {
		rpcAsset.AssetGroup = &tarorpc.AssetGroup{
			RawGroupKey:     a.GroupKey.RawKey.PubKey.SerializeCompressed(),

It is thinking that a.GroupKey.RawKey.PubKey is nil. But should that ever be possible? For a.GroupKey.RawKey.PubKey to be nil while a.GroupKey is not nil? Wondering if bug in my code, or if the test itself needs to be reimplemented properly

Just a quick update here, I'm struggling to get the test to pass. I've identified the cause is that the a.GroupKey.RawKey in specific is nil in the test case when minting an asset with emissions enabled.
But when I actually test this out with a newly minted asset, RawKey is NOT nil
      "asset_group": {
                "raw_group_key": "02c2f562b11b4bbb977072ac3945b5ff13551ad545a2e8f25e6777e685da08111e",
                "tweaked_group_key": "02a331696d381323589904d7a01e7a3066d934fb7c8d35024e686cfd9dd8c4ed7f",
                "asset_id_sig": "f92e77833153ccd87b365942c5e446932d363f45b112a9d336e119ed0cd4e855e38371d69e3d1e8435fa86d9c50f586ea789d11758474a52c491a9f8839636e2"
            },
            ```

I can't figure out how to get the test ensures this :(

I did a little more investigation and have narrowed it down to NOT being a bug with the tests, but I believe an actual bug when exporting a proof.
For some reason when you list the assets in CLI, RawKey is not nil. But when we export the proof, import it, and try to decode, RawKey is nil

@positiveblue: review reminder
@habibitcoin, remember to re-request review from reviewers when ready

I really like this feature and would like to use it in my testing. I'm having some trouble with this.
I mint an asset, then I go to export an asset providing the asset id and script key, and I get an error,
unable to find proof

I'm going to do some more debugging, but I think I'm missing a step

Just took this for a spin, looks like it works. I wrote a file and then read a file.I would like the meta data to be human readable.
@habibitcoin Have you used the decode to take in the raw proof data?

@positiveblue: review reminder
@habibitcoin, remember to re-request review from reviewers when ready

@positiveblue: review reminder
@habibitcoin, remember to re-request review from reviewers when ready

There is something that should maybe be explained in the documentation, it's about raw_proof parameter meaning. Sorry if I'm wrong and I did not get something.
After minting an asset, if I run:
tarocli proofs export  --asset_id 18c4eaca8905cad3ae027494b8c70a085e9452226ddea8eacfdaf6cb88431c12 \
                        --script_key 02102a7c269bf61b587c6278206d05433fa09b9fbe30d618a2cc61868622f5518f

I get this result:
{
    "raw_proof": "0000000001fd03f1002488d6b6d1f7fe8dd4134e699037b52fa7273674e3a181deacc52bdddbf62274ac00000000015000000020dbc0a8738a77d0b1f29df61820e015784d87b13f508d07af1200000000000000e9a0e62808024419f29e12075ee7192283d45787ba4e510dcc4325c4f13e2da617252c64ffff001dee9af8c502ea0200000000010188d6b6d1f7fe8dd4134e699037b52fa7273674e3a181deacc52bdddbf62274ac0000000000ffffffff02e80300000000000022512068b8ab655c6f3edfc0b241a3c560355146ed6bbf92514c09b10a0c86ac140e23910a000000000000160014c35088956d26c44af4c00dfc8bf10d9a4c79320e0247304402201829c56dba3c2ab1cd85de1fe3d7bfec8dffc2b2d4aac8c362cae25052a420290220506b92ca45a514a8b2daabb1eb8adf5283ab29b382d0331c9c884f8c89dd830f012103219e2594f427e338690c3f51409706439d8ab83fde02d18d0c28ec55c285801c0000000003fd0102083c7c4198be914f1cab7319592f0249d727fa87890ec4185b8b7881d777158d0af976bfe9e708afddbef3616fe086f90e0879295f231ac2c6d5be387ba682903bc9f67bd23cff72af821bc6feb5995b83b603aba9074ce1c74a4e13a45f108713102ce2cdd7590df19cc6c9b0f631097a2dedec3e30c1633300ea02e179eea39ef366c1a3711657d6302e516e3218b8de4a0089ca0f92621a8a49a8790dc9a1deba788b11327b109130ca4dede1a29d6ac6c03a86454199c5bc6e8a74d32df7f93d7b24f5dec13ec57f232b95d712d5947b04785cac15d00e4ea9ae6e0ffd9b3361cab39effb1b072f0918fd3ea9e9e0ae35ee61ed51e9d09548c619f06d4caa8c104e4000100014588d6b6d1f7fe8dd4134e699037b52fa7273674e3a181deacc52bdddbf62274ac000000000c6d79526f796c6c6f436f696e0e5573656420627920526f796c6c6f00000000000201000303fd03e7066901670065000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008020000092102102a7c269bf61b587c6278206d05433fa09b9fbe30d618a2cc61868622f5518f059f000400000000012102bf9d0eac1be77456ced581721d9f8837b42346173556c418794e0347e08f817102740049000100012018c4eaca8905cad3ae027494b8c70a085e9452226ddea8eacfdaf6cb88431c1202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff012700010001220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0ea5f7971d2fe0f27d8975f656332a5f6bf0176b998a52dedaedf2ffbaef922f",
    "genesis_point": ""
}

BUT, if I use the previous raw_proof parameter value with the decode method developed by @habibitcoin, i get an error (invalid checksum).
In fact, I must export proof as a file first (with the --proof_file parameter) and use base 64 like this: cat myProof | base64 -w 0
. With this value if it works.
I think it's quite confusing for developer reading the documentation to have two parameters with same name but different meaning.

@positiveblue: review reminder
@habibitcoin, remember to re-request review from reviewers when ready

@positiveblue: review reminder
@habibitcoin, remember to re-request review from reviewers when ready

@positiveblue: review reminder
@habibitcoin, remember to re-request review from reviewers when ready

Hey @habibitcoin are you down to rebase this? A lot of naming stuff has changed, so that'll likely be the biggest conflict you run into locally.

BUT, if I use the previous raw_proof parameter value with the decode method developed by @habibitcoin, i get an error (invalid checksum).

I think the difference is if it's just that state transition, or include the normal proof file headings.

@positiveblue: review reminder
@habibitcoin, remember to re-request review from reviewers when ready

@Roasbeef yessir! Already have it underway locally, should have it done in shortly

Updated and ready for another round of review!
Tapd % tapcli --network testnet --tlscertpath tls.cert  --macaroonpath data/testnet/admin.macaroon proofs decode --proof_file test.json
{
    "decoded_proof":  {
        "proof_at_depth":  "1",
        "number_of_proofs":  "2",
        "asset":  {
            "version":  0,
            "asset_genesis":  {
                "genesis_point":  "fde4b6b44df8e4bf8a8a48961d2a61f432146c7f742966945216208bda14dadd:1",
                "name":  "Habibitcoins",
                "meta_hash":  "49f7b90f9eefe6a5e5c6fe3e1317e1894ad721f9c9f2ac0070a631e7b3bf0302",
                "asset_id":  "3c59caaeddd621f1b537d2329aebec2087c716623395a7b72cdcf4a96702b269",
                "output_index":  0,
                "version":  0
            },
            "asset_type":  "NORMAL",
            "amount":  "20999998",
            "lock_time":  0,
            "relative_lock_time":  0,
            "script_version":  0,
            "script_key":  "02ebd16b59524d98be070002493c9724d03f68bc57c27176ac5cb1233d6c9b28ce",
            "script_key_is_local":  false,
            "asset_group":  null,
            "chain_anchor":  {
                "anchor_tx":  "0200000000010295bfdee8c817a893f6ad8af7a208e522325ffcb9a8ef6c041952e29b572894720100000000ffffffff95bfdee8c817a893f6ad8af7a208e522325ffcb9a8ef6c041952e29b5728947200000000000000000003e803000000000000225120a6a5e1a951faf32eba5592234343118a071f35dbeb1470a0cbf191fd00e730a2e8030000000000002251206e37557177f706b67fea6be30f4e6abec3fdd57358bcc67a5cd6fb30e496bc1811663900000000002251205d3bea984c8f60995b68a2533ac75ba1c1ae3f498f479c9804c9e0aa6b1e64d70140e5476d1c78d070c7cdb5ed331be125410bc9b75d8610092a9b64f146f2dffcac3e8406b930529d1f337fc5a9c22e8057f77e2398d950ce34ea6c3fcd6aec5206014037ce813bc7e3c51e260316835092d52e3a1a60f5337040470faebc86b0cbcb3e79f8cd2b81279091a28fac6206ec1eddf3892f1f5413fc8cf6a50fd157195f1a00000000",
                "anchor_txid":  "d77db8788b2613882fc102eefb3971597398631b6928ba458b2791acef03c1c3",
                "anchor_block_hash":  "00000000000092e4ac7e679a3bf8b43870bcf35cea0bcdf7e46f0531296f7e7b",
                "anchor_outpoint":  "d77db8788b2613882fc102eefb3971597398631b6928ba458b2791acef03c1c3:0",
                "internal_key":  "0256f3f99616e881163a6f6d15e6866a4800106523827c4649587d95b226e394a1",
                "merkle_root":  "385cee752b24d433680c3c346e8220535de64f99c78fc3f4c0d2447b10e2e772",
                "tapscript_sibling":  ""
            },
            "prev_witnesses":  [],
            "is_spent":  false
        },
        "tx_merkle_proof":  "070c09bbd9ca188bd8541b2de2945b90cd7f3b6ccd90223ef6b6cd11704c111d5031c054611c06bc4349e5f3f74a88df6adb8a76deadf6c045e2f2eacee03049354fb1377b7fa07a7b4f6b625a3733da0dbbb15f2560f961f94a79c814530e9515097bc160268b501230e07e8d0b79bcdeb0151825136aee74f2db70fe6657c38d1b95d11d96b440a961eb272471265dd7736ebd6e11faa7881513e80d60ba116fa5ece87e70abca83f8daa9fbe4be8fee9f2ea170a1f88e9160e415efd5c88e79aba8971a11505001629f96e2468f2b1b24e4e07ded0b8c3d486c850c30fbb1bc6c",
        "inclusion_proof":  "00040000000001210256f3f99616e881163a6f6d15e6866a4800106523827c4649587d95b226e394a10274004900010001203c59caaeddd621f1b537d2329aebec2087c716623395a7b72cdcf4a96702b26902220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff012700010001220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
        "exclusion_proofs":  [
            "000400000001012102e5a4da38c35ad44c0edcf1d007fd307584d02deb712347a3c8b356ec6264f27a029c007100010001203c59caaeddd621f1b537d2329aebec2087c716623395a7b72cdcf4a96702b269024a000140adb74259c2ab240034fcf23c67b111f21b82aefe04da57e35283612f12ef230000000000000002ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f012700010001220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
            "000400000002012102f59c2086590b3a04dcedd2c5a0b6565f17233abd84eab00ad382f9b6fb6508880303020101"
        ],
        "split_root_proof":  ""
    }
}

@habibitcoin we're shaping the queue of PRs for tap-v0.2.1 do you think you can update this PR to make it in?

@roasbeef: review reminder
@positiveblue: review reminder
@habibitcoin, remember to re-request review from reviewers when ready

@dstadulis ready for final review!

@dstadulis ready for review again 👍

@positiveblue thanks for the review! Not sure I understand your comment re; the addtl fields, they should be returned properly I believe, attached a sample output:
{"decoded_proof":{"proof_at_depth":1,"number_of_proofs":2,"asset":{"version":0,"asset_genesis":{"genesis_point":"8f9dea9fbfd22c9c4084fc922650652bab0840eac6d3e139b45d1f1ddb35757d:2","name":"PythonBux","meta_hash":"799b3ea0b60e9c4c66dfeb552825db6d3b7bab5460bc6f07734aae72f70671c4","asset_id":"54df2137150ddddd9357623069418789242ae3bf5a8b7b6be8a67577a14be14e","output_index":0,"version":0},"asset_type":"NORMAL","amount":"1","lock_time":0,"relative_lock_time":0,"script_version":0,"script_key":"0206667113ba0b00e8f284abf6941b37e2b14326c4289cadb010db0f0cf89b21c0","script_key_is_local":false,"asset_group":null,"chain_anchor":{"anchor_tx":"02000000000102c853219c7743adc1bb311019edb4e8e7eb75f83b29e99dc698bb680f03bf0ce30100000000ffffffffc853219c7743adc1bb311019edb4e8e7eb75f83b29e99dc698bb680f03bf0ce300000000000000000003e803000000000000225120f5ea05c05bfe1b3a72f17ddaff83e608cacdbef4e3e0a88441e1c503961f541ae803000000000000225120323e8392eb255ca02b64202528678dddef7541d6b59e3c2cee455c377e731f11a81d13000000000022512044dd1493ccfa2e3cc6e526ac82cc1c201a18ece07345727b08b789314a6409a90140457fcedd8a3de9ae574f1de6f310dbe02a4324011279e77cc6bebe928c76f0095a520c558efa6994f0f5721fad6b4ba50fc2d42e6f9301cfd8303ee3422d21ef0140dcdb3e79f785f053493e2e0536d9622bc2f98e8c1007f944ff228d10c2c56fe1d3c402e074298d57eb96262642c76c8152e031b2b382d1eef613e1442f8f71bd00000000","anchor_txid":"8859fe78c2fc0d3d98e0a6238cb10bf87798ddd5ed994ba494680d7bb9d99c91","anchor_block_hash":"000000000000000b8016b76f70f2b562b23cb6e8247b87ff021fc746be7683a7","anchor_outpoint":"8859fe78c2fc0d3d98e0a6238cb10bf87798ddd5ed994ba494680d7bb9d99c91:1","internal_key":"02ecdae74d996a281b61c911c51b9533383b4358f10f02943ec102b1ace9dff292","merkle_root":"","tapscript_sibling":""},"prev_witnesses":[{"prev_id":{"anchor_point":"0000000000000000000000000000000000000000000000000000000000000000:0","asset_id":"0000000000000000000000000000000000000000000000000000000000000000","script_key":"000000000000000000000000000000000000000000000000000000000000000000","amount":"0"},"tx_witness":[],"split_commitment":{"root_asset":{"version":0,"asset_genesis":{"genesis_point":"8f9dea9fbfd22c9c4084fc922650652bab0840eac6d3e139b45d1f1ddb35757d:2","name":"PythonBux","meta_hash":"799b3ea0b60e9c4c66dfeb552825db6d3b7bab5460bc6f07734aae72f70671c4","asset_id":"54df2137150ddddd9357623069418789242ae3bf5a8b7b6be8a67577a14be14e","output_index":0,"version":0},"asset_type":"NORMAL","amount":"99","lock_time":0,"relative_lock_time":0,"script_version":0,"script_key":"023dba4c1cb1b66a8c27e777b9eea380b5398f1287c2d3fdcda933822eb4cb39e2","script_key_is_local":false,"asset_group":null,"chain_anchor":null,"prev_witnesses":[{"prev_id":{"anchor_point":"e30cbf030f68bb98c69de9293bf875ebe7e8b4ed191031bbc1ad43779c2153c8:0","asset_id":"54df2137150ddddd9357623069418789242ae3bf5a8b7b6be8a67577a14be14e","script_key":"0217171c348984aa542bee4e50b741d92ce6e4466f8af1fcd6467b9509c1312e26","amount":"0"},"tx_witness":["4f62b268edbd370103d6c34239bf74762f0af714c45d04c8ad35ea488ec4a4c0af2fa9b3dfa1c5cc78f77dcedf82a29dc669bc1187d8b227b21820ff2344568f"],"split_commitment":null}],"is_spent":false}}}],"is_spent":false},"meta_reveal":{"data":"","type":"META_TYPE_OPAQUE","meta_hash":"01e246b58d8e782fc96881c090d833eefa37e804cb308aeae0f7471c9ef1ea1a"},"tx_merkle_proof":"06fa2f4f9f7a5b558f21876f015ce806e878cacb3882d1d263841b628cee41909f6e74740e2bc67dd8d1a902cd53c812e2015cbf729233bbbfde8e636ed194c0394f3ba9c2621c1cb174343c9119c76dfb03d45fbad8500eb7062a3d874e85e6d7b60c5c419d44febe41ed53193630ebdc6ccf12295a913f488f915226ae746a56e0f2de349e34148a2e123ab02f6e640de4104ea4e6edb14ff3d8ed34b3a2f0eb7eac4f77ee31eadd4dafd5664777945bb6e8cdf26469b5043c8bc2511d85e2b22e","inclusion_proof":"000400000001012102ecdae74d996a281b61c911c51b9533383b4358f10f02943ec102b1ace9dff29202740049000100012054df2137150ddddd9357623069418789242ae3bf5a8b7b6be8a67577a14be14e02220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff012700010001220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","exclusion_proofs":["00040000000001210254dce613492424e99c795c7e99d9523b97af8d3bcbfbdc3044e0ab0c9c4cbcf5029c0071000100012054df2137150ddddd9357623069418789242ae3bf5a8b7b6be8a67577a14be14e024a000152928ba8f5b20ae8f5ebad58f80c478805ce83b28aa825c2870ce4d930d96d060000000000000063ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf012700010001220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","000400000002012102fb0cc7cee22cb0620e47674dfb0972977b9dc1d6713a6526863fccf6c690d2d00303020101"],"split_root_proof":"00040000000001210254dce613492424e99c795c7e99d9523b97af8d3bcbfbdc3044e0ab0c9c4cbcf502740049000100012054df2137150ddddd9357623069418789242ae3bf5a8b7b6be8a67577a14be14e02220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff012700010001220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","num_additional_inputs":0,"challenge_witness":[]}}


Add WHYPERS

Checklist

[x] Token Address in lowercase
[x] Link to verified contract on Blastscan
[x] Description of token if non-standard ERC20, e.g. has tax, OFT token, bridged XERC20, ERC-404, etc.
[x] An SVG <150 KB in size, cropped to be a circle. Rectangles and other shapes of images will not be accepted.
[x] Token category you would like to be listed under

Current categories: DeFi, Memecoin, Stablecoin, Game, Other

[x] Ran the update_list.sh script to generate the token-list.json file DO NOT MANUALLY EDIT THE FILE

Additional Information

Token link: https://blastscan.io/address/0xd85F663EffcAA5D44fa69b0D5c0dc02B20957c86
Standard token

Note not a standard token, looks like there is some mining functionality

Note not a standard token, looks like there is some mining functionality

It's a standard one, the mining is done on the unwrapped token $HYPERS


feat: partial streaming interactivity

What is it?

[ ] Feature / enhancement
[ ] Bug
[ ] Docs / tests

Description
Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.
Use cases and why

One use case

Another use case

Checklist:

[ ] My code follows the developer guidelines of this project
[ ] I have performed a self-review of my own code
[ ] I have made corresponding changes to the documentation
[ ] Added new tests to cover the fix / functionality

Closing this because the partial streaming will be done differently in v2 and the other bits have been applied to main


Incorrect reference to the next release tag

We're referencing shakapacker@next in
https://github.com/shakacode/shakapacker/blob/master/README.md?plain=1#L612
and https://github.com/shakacode/shakapacker/blob/master/lib/install/template.rb#L63-L64
However, there is no next tag in the NPM registry, we've got rc instead. Compare shakapacker vs rails/webpacker.
Yarn v1 behaves fine and just asks to pick a different release instead. Yarn v3 fails miserably though and refuses to install anything.
Looks like we're using release-it and not supplying the tag name so tag guessing game happens at https://github.com/release-it/release-it/blob/master/lib/plugin/npm/npm.js#L202-L210 and just grabs first tag that is not latest.
Are we able to retag the RC releases with next so everything falls into place @justin808? If not, then we can settle on rc and update the code.

@tomdracz great catch:

I added the next tag.
Is anything else needed before a final 6.0.0 release?


Decide on featured listings for Mainnet

We can't be selling Taylor Swift concert tickets on the mainnet. :)

So what DO we want for featured listings on main net??? 😃
Related: https://github.com/OriginProtocol/origin-js/issues/455

At a minimum, we should offer some Origin swag for sale. There are plenty of on-demand services that will let us offer a variety of mugs, shirts, etc without holding inventory.
@matthewliu @jonhearty @coleman415 would be better if we can line up some inventory from our existing partners. Keep in mind, they need to be single for sale items for now (no fractional usage or bulk sales).

That will require management of an[other?] ETH account similarly to messaging, arbitration, and whatever else. 🔑

Whatever we decide for listings, I think it'd be a nice touch to get professional photography done to keep the first impression of the DApp as high-production.

Agree with all points above.
The one caveat is we can hack some of the fractional usage or mult-unit
stuff through descriptive text. (Rent this home on this specific weekend or
purchase 5 concert tickets to this performance).
On Sat, Sep 15, 2018 at 6:10 AM, Stan James<EMAIL_ADDRESS>wrote:

Whatever we decide for listings, I think it'd be a nice touch to get
professional photography done to keep the first impression of the DApp as
high-production.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/OriginProtocol/origin-js/issues/456#issuecomment-421485148,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AEuxN9kweGvJ4fl-9OHx311n-NUeyTDaks5ubBspgaJpZM4Wp64W
.

--
Cofounder of Origin http://www.originprotocol.com
Join our Telegram http://t.me/originprotocol

I'll work on this. Thanks for assigned.
On Sat, Sep 15, 2018 at 5:42 AM, Stan James<EMAIL_ADDRESS>wrote:

Assigned #456 https://github.com/OriginProtocol/origin-js/issues/456 to
@matthewliu https://github.com/matthewliu.
—
You are receiving this because you were assigned.
Reply to this email directly, view it on GitHub
https://github.com/OriginProtocol/origin-js/issues/456#event-1847002525,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AEuxN36PlwHs1PAkpF_qLfNWZeutpv28ks5ubBStgaJpZM4Wp64W
.

--
Cofounder of Origin http://www.originprotocol.com
Join our Telegram http://t.me/originprotocol

@matthewliu I had inferred from the mockups that boost was taking the place of featured listings, but I guess we might still have both. If so, we probably need a UI indicator for featured if we want it to be distinct.

My bad for not realizing that "Featured" was already out of the UI. But we presumably will want to pay to boost some of our own listings to the top.

@wanderingstan yeah, it was probably a poor assumption on my part. It makes sense that we might want to truly feature some listings as long as it doesn't conflict with the boost strategy.

I don’t see the two as mutually exclusive. Also don’t see featured as a
long term must have (though I’d suspect that maybe some of our partners
would want it).
On Tue, Sep 18, 2018 at 7:02 AM Micah Alcorn<EMAIL_ADDRESS>wrote:

@wanderingstan https://github.com/wanderingstan yeah, it was probably a
poor assumption on my part. It makes sense that we might want to truly
feature some listings as long as it doesn't conflict with the boost
strategy.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/OriginProtocol/origin-js/issues/456#issuecomment-422186562,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AEuxN66ZY1nPA5LfsgZ5UPX7Opm94KfIks5ucBvlgaJpZM4Wp64W
.

--
Cofounder of Origin http://www.originprotocol.com
Join our Telegram http://t.me/originprotocol

Considering this done ☑