algorand / algorand/pyteal

Add ability to set individual elements in ABI containers

Đang mở
#602 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
Team Scytale
Ngôn ngữ chính
Python
Star
288
Fork
138
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

## Problem
Right now the `Tuple`, `StaticArray`, and `DynamicArray` ABI type containers have `set` methods which can be used to set the entire container's value.

However, it's not currently possible to set the value of only a single element in that container.

## Possible Solution
Perhaps the existing `TupleElement` and `ArrayElement` classes which are returned from `__getitem__` for tuples and arrays, respectively, can be extended to allow modifying individual values as well.

That would make something like this possible:
```python
def f() -> Expr:
a = abi.make(abi.Bool)
b = abi.make(abi.Uint64)
c = abi.make(abi.Tuple2[abi.Bool, abi.Uint64])
return Seq(
a.set(True), # a=True, b=uninitialized, c=uninitialized
b.set(100), # a=True, b=100, c=uninitialized
c.set(a, b), # a=True, b=100, c=[True,100]
a.set(False), # a=False, b=100, c=[True,100]
c[0].set(a) # a=False, b=100, c=[False,100]
# the above line would be the proposed change
)
```

## Follow-up Concerns
If a way to set individual elements in a container is adopted, that doesn't change the fact that a container must be fully populated with all elements before any other operation can happen. Should we instead allow containers to be partially initialized, or initialized with default values?

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.